无论目录如何,都按文件名暂存文件 - Git

时间:2010-09-22 23:42:23

标签: git

我在项目中有非常嵌套目录,而且我是一个懒惰的程序员。

假设我有一个文件名EventEditor.foo我想要暂存我的文件,无论它是在根目录还是./src/holy/sweet/mother/of/baby/raptor/jesus/this/is/a/long/hiearchy/EventEditor.foo

我的目标是成为所有人,“Yo Git,添加EventEditor”和bam。它只需要键入类似git add *EventEdi*的内容即可。这可能吗?还是我一天都在做梦?

8 个答案:

答案 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/file1dir/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'