git ls-files
之类的命令仅显示未跟踪的文件?我问的原因是因为我使用以下命令来处理所有已删除的文件:
git ls-files -d | xargs git rm
对于未跟踪的文件,我想要类似的东西:不是我想要的,因为它还会显示被忽略的文件。我还能够提出以下冗长而又丑陋的命令:如果没有,如何创建自定义git命令?
#1 楼
要列出未跟踪的文件,请尝试:git ls-files --others --exclude-standard
如果需要将输出通过管道传输到
xargs
,则最好使用git ls-files -z
和xargs -0
注意空格: br /> git ls-files -z -o --exclude-standard | xargs -0 git add
用于添加未跟踪文件的别名:
au = !git add $(git ls-files -o --exclude-standard)
编辑:供参考:git-ls-files
评论
完善!什么!是指别名行的开头,还是记录在哪里?
–我们都是莫妮卡
2010-09-27 6:31
@takeshin如何仅获取父目录名称?不是子文件夹。这些未跟踪的文件中的意思是:/ P / a / files,/ P / a / images,/ P / a / / P /,...-我只想列出/ P /
–.jacky博士
16年7月16日在11:05
在什么情况下您需要别名? git add *将执行相同的操作:添加除标准外的所有未跟踪文件(路径的文件包含在.gitignore中)。
–toinetoine
17年7月12日在12:04
我希望别名能够在仓库中的所有目录中保持一致(ls-files命令仅显示当前树中已更改的文件),所以我有[alias] lso =“!f(){cd $(git rev-parse --show-toplevel); git ls-files -o;}; f“
– qneill
17-10-12在15:02
谢谢。好评论。
–黑暗无耻
18年7月16日在15:18
#2 楼
如果只想删除未跟踪的文件,请执行以下操作:git clean -df
如果要还包括专门忽略的文件,请添加
x
。我一整天都在使用git clean -dfx
。您只需编写一个名为
git-whatever
的脚本并将其放在路径中,就可以创建自定义git。评论
我想添加所有未跟踪的文件(例如,在我移动一些东西之后)的情况更为常见。无论如何,感谢您提供有关自定义命令的提示。该机制记录在哪里?
–我们都是莫妮卡
2010-09-27 6:27
只需执行git add -A或git add -u(取决于哪种方法对您更有意义)
–达斯汀
2010-09-27 17:34
您的评论是真实的答案,稍后@Mike Lococo也会重复
– andho
17年4月4日在11:57
和“ git clean -dfxn”以添加“ n”进行空运行
– charo
18年2月17日在13:05
#3 楼
git add -A -n
将做您想要的。 -A
将所有未跟踪的文件添加到存储库中,-n
使其成为一个dry-run
,其中未执行添加操作,但给出了状态输出,列出了每个应添加的文件。评论
这是一个很好的答案!请注意,它不包括.gitignore文件中的文件,这通常是我们想要的,如果不是,则使用git add -fAn。
– cdunn2001
13年6月29日在20:32
这似乎是最好的答案。
–Rob Grant
16年8月16日在9:08
这是最好的答案。它明确告诉用户它会做什么(不做),并有机会在实际添加之前对其进行检查。完善。谢谢!
– Digiguy
17年6月8日在17:41
它还列出了修改后的文件。
–弗兰克·雷恩·谢弗(Frank-ReneSchäfer)
18年2月2日在12:22
很好,但是我把它包装了:添加'$ file'。而git ls-files --exclude-standard -o给出了一个裸露的输出,滚烫。
–高pal
19年8月16日在5:23
#4 楼
接受的答案在带有空格的文件名上崩溃。此时,我不确定如何更新别名命令,因此将改进后的版本放在这里:git ls-files -z -o --exclude-standard | xargs -0 git add
评论
我认为这是正确的答案,因为它提供了每个文件的路径,以便随后对它们执行操作(例如git add)
– Pablo Burgos
18-11-22在15:29
#5 楼
一切都很简单要获取所有未跟踪文件的列表,请使用命令git status以及选项-u(--untracked-files)
git status -u
评论
非递归版本呢?
–大卫
2015年6月10日15:27
不幸的是,它也列出了通过.gitignore文件忽略的文件。
–蓬松
16 Mar 1 '16 at 9:31
这是在初始提交时显示我忽略的文件的唯一答案,但是我必须在git status -u命令中添加--ignored
– D.N.
17-2-27在19:18
这很简单也很不错。
–王E
18年8月24日在11:07
这也显示了修改后的文件。因此,不能回答这个问题:只显示未跟踪的文件。
–通配符
'18 Sep 12'在1:10
#6 楼
我知道这是一个老问题,但就列出未跟踪文件而言,我想我会再添加一个列出未跟踪文件夹的文件:通过以下方法显示将删除的文件(包括.gitignore文件):git clean -xdn
这具有显示所有文件和所有未跟踪文件夹的优点。参数:
x
-显示所有未跟踪的文件(包括git等忽略的文件,例如生成输出等)。d
-显示未跟踪的目录n
-最重要的是! -dryrun,即实际上不删除任何内容,只需使用clean机制显示结果即可。这样做会有些不安全,以防万一您忘记了
-n
。因此,我通常在git config中对其进行别名。评论
为什么git输出是如此令人讨厌的可读性?提议的答案在每个文件名之前都会打印“ Would remove”,因此如果没有进一步grepping的话,就不能用于OP的用例。
–fieres
10月30日10:54
#7 楼
在寻找可能添加的文件时。git show
的输出可以做到这一点,但它还包含许多其他内容。以下命令可用于获取相同的文件列表,但不包含所有其他内容。特定样式,然后将其管道输送到git add
。 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'
#8 楼
我检查过的所有以前的答案也会列出要提交的文件。 />git status --porcelain | awk '/^\?\?/ { print ; }'
或
git status --porcelain | grep -v '\?\?'
评论
这似乎不适用于名称中带有空格的文件
–ssc
5月4日12:24
#9 楼
我认为这与原海报意图相同:git add .
评论
每次执行git / svn add。时,小猫都会死亡。
– Nakilon
2013年6月6日15:28
嘿,仅当您在远程分支的本地副本中有一堆碎片时才可以;)创建本地分支,然后可以git add。有罪不罚!
–蒂姆·富尔默(Tim Fulmer)
13年7月11日在22:19
@Nakilon,这就是您正确配置.gitignore的原因。避免git add。仍然很好。更好的是git add -u。
–通配符
18/09/12在1:11
评论
您能否详细说明为什么需要git ls-files -d | xargs git rm?这将删除所有git通知丢失的文件。我的问题是有关如何执行相关操作的-添加git当前未跟踪的所有文件。我通常会在重命名,合并和/或拆分我的代码文件之后执行这两项操作。
如果他们不见了,那不是已经删除了吗?除非...您从其他地方拉出来,然后尝试与远程同步...我想我明白了。
我已经测试了所有答案,如果没有空的未跟踪文件夹,没人能找到它。
@kittygirl这是正确的。由于git仅适用于文件,因此它无法跟踪空文件夹。尝试查找。 -类型d-空。