我在项目中有非常嵌套目录,而且我是一个懒惰的程序员。
假设我有一个文件名EventEditor.foo
我想要暂存我的文件,无论它是在根目录还是./src/holy/sweet/mother/of/baby/raptor/jesus/this/is/a/long/hiearchy/EventEditor.foo
我的目标是成为所有人,“Yo Git,添加EventEditor”和bam。它只需要键入类似git add *EventEdi*
的内容即可。这可能吗?还是我一天都在做梦?
答案 0 :(得分:31)
如果您希望在使用git add
时递归匹配glob,请启动传递给git add
的带有目录名称的glob(例如当前目录的.
),并确保glob是引号,以便Git可以解释它而不是shell:
git add "./*EventEdi*"
一个完整的例子:
$ git init git-add Initialized empty Git repository in /Users/lambda/tmp/stackoverflow/git-add/.git/ $ cd git-add/ $ mkdir -p foo/bar/baz $ touch foo/bar/baz/some-long-filename.txt $ git add "./*long-filename*" $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: foo/bar/baz/some-long-filename.txt #
来自manual:
可以给出Fileglobs(例如
*.c
)来添加所有匹配的文件。此外,还可以提供一个主要目录名称(例如dir
添加dir/file1
和dir/file2
),以递归方式添加目录中的所有文件。
答案 1 :(得分:6)
如果您使用的是Linux,则可以轻松使用以下内容:
find . -name EventEditor.foo -exec git add {} \;
答案 2 :(得分:4)
Brian的答案非常 shifty ;) 但你也可能觉得有用:
git add -i
或
gitg
答案 3 :(得分:2)
我写了一个小工具(git-number),允许我在处理git中的文件时使用数字而不是文件名。
“git number”运行git status并按顺序为每个显示的文件名插入数字。
之后,当告诉git做某事时,我可以使用这些数字而不是文件名。
所以在你的情况下我可以节省很多打字:
$ ga 1
(假设1是与/ deep / nested / file / with-obscenely-long_and_tortured_name相关联的数字)
完成此操作后,这是可行的:
$ alias gn='git number'
$ alias ga='git number add'
$ gn
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#1 very/deeply/nested/file/with-obscenely-long_and_tortured_name
#2 README
nothing added to commit but untracked files present (use "git add" to track)
$ ga 1
您可以在github上阅读有关git-number的更多信息:https://github.com/holygeek/git-number
答案 4 :(得分:1)
Brian的答案直接解决了您的需求,但我会注意到,如果Git已经跟踪了/very/deeply/nested/file/with-obscenely-long_and_tortured_name
,而您刚刚更改了它,那么您可以说git add -u
来进行这些更改。如果您希望不进行其他更改,可以git add -up
让您分段决定。
答案 5 :(得分:1)
我使用以下脚本的组合来完成您的要求。
我把这个别名给gga:
git ls-files -m -o --exclude-standard | grep $* | xargs -r git add
用法:
gga raptor # stages everything in raptor directory
gga Event #stages all files with Event in the name
你明白了。
如果我必须对事物更具体(因为grepping不够具体),我只需使用
git ls-files | grep的
然后我只是将文件的完整路径复制并粘贴到git add。
答案 6 :(得分:1)
我把它放在我的bash配置文件中,用于添加和签出长文件名
function gal() {
git add "./*$1*"
}
function gcl() {
git co -p "./*$1*"
}
gal&#34; filename&#34;
将添加一个包含字符串filename的文件。这是通配符。只需要使用唯一的名称作为参数
答案 7 :(得分:1)
在最近的git版本中,你可以做到预期的
git add '*EventEditor.foo'