Shell Redirect'git clean'输出

时间:2014-01-02 14:12:18

标签: git shell fish

我有一个很大的代码仓库,一旦编译,就会在git源代码树中附上大约3000个额外的文件(.o s,.so s等),以及一些其他一百个文件更改(自动生成的文件,权限等)。所以我已经习惯在每git clean -f之前做git reset --hard HEADpull,以避免我遇到的大量冲突。

我正在尝试将其自动化为一个非常小的脚本,但我找不到任何方法来重定向git clean的输出。具体来说,我正在做这样的事情:

(在鱼壳中)

set -l linecount ( git clean -n | wc -l )
git clean -f | pv -l -s $linecount

我已尝试将pv设为$PAGER并启用--paginate,但没有运气。我尝试了2>&1 |之类的管道的各种组合无济于事。

任何人都知道如何使这项工作?

2 个答案:

答案 0 :(得分:1)

通常,这将由explicitly ignoring your .o, .so, etc. files in your .gitignore file完成。

示例文件可能如下所示:

# Ignore compiled objects
*.o
*.so

.gitignore文件应该提交到您的存储库,以便其他开发人员可以从中受益。对于您只想在存储库的一个副本上忽略的文件,可以使用.git/info/excludepush时不会包含git rm --cached

创建此文件的一个很好的起点是gitignore.io,它允许您提交正在使用的语言,系统和工具,并吐出一个有用的忽略文件。

如果这些文件已经提交,则忽略它们将无效。在这种情况下,您有几个选择:

  1. Remove the committed files from the repositoryfetch。请注意,这会影响其他用户;下次git update-index --assume-unchanged这些文件将从其计算机中删除。您可能需要仔细协调。

  2. 告诉Git假设文件未经{{1}}修改。

答案 1 :(得分:0)

Doh ..似乎这是用户错误...

pv回应输入到输出。 Duh ..应该有正确的语法:

git clean -f | pv -l -s $linecount > /dev/null

现在它有效!