我有一个很大的代码仓库,一旦编译,就会在git源代码树中附上大约3000个额外的文件(.o
s,.so
s等),以及一些其他一百个文件更改(自动生成的文件,权限等)。所以我已经习惯在每git clean -f
之前做git reset --hard HEAD
和pull
,以避免我遇到的大量冲突。
我正在尝试将其自动化为一个非常小的脚本,但我找不到任何方法来重定向git clean
的输出。具体来说,我正在做这样的事情:
(在鱼壳中)
set -l linecount ( git clean -n | wc -l )
git clean -f | pv -l -s $linecount
我已尝试将pv
设为$PAGER
并启用--paginate
,但没有运气。我尝试了2>&1 |
之类的管道的各种组合无济于事。
任何人都知道如何使这项工作?
答案 0 :(得分:1)
通常,这将由explicitly ignoring your .o
, .so
, etc. files in your .gitignore
file完成。
示例文件可能如下所示:
# Ignore compiled objects
*.o
*.so
.gitignore
文件应该提交到您的存储库,以便其他开发人员可以从中受益。对于您只想在存储库的一个副本上忽略的文件,可以使用.git/info/exclude
,push
时不会包含git rm --cached
。
创建此文件的一个很好的起点是gitignore.io,它允许您提交正在使用的语言,系统和工具,并吐出一个有用的忽略文件。
如果这些文件已经提交,则忽略它们将无效。在这种情况下,您有几个选择:
Remove the committed files from the repository与fetch
。请注意,这会影响其他用户;下次git update-index --assume-unchanged
这些文件将从其计算机中删除。您可能需要仔细协调。
告诉Git假设文件未经{{1}}修改。
答案 1 :(得分:0)
Doh ..似乎这是用户错误...
pv
回应输入到输出。 Duh ..应该有正确的语法:
git clean -f | pv -l -s $linecount > /dev/null
现在它有效!