合并后如何从 git 存储库中删除.orig 文件?

某种程度上。Orig 文件在合并期间在我的 git 存储库中被检查,现在显示在已修改和未跟踪的扇区中。但我不希望这些文件再出现在我的存储库中。怎么做。

    modified:   Gemfile.lock.orig
#   modified:   Gemfile.orig
#   modified:   app/assets/images/bg_required.png.orig
#   modified:   app/assets/javascripts/application.js.orig
    

etc...

如果你能帮忙,我将不胜感激。

94409 次浏览

git rm <file>

Http://git-scm.com/docs/git-rm

还要将要忽略的文件/目录添加到. gitignore 文件中。

可以使用. gitignore 忽略文件

只需将 * . orig 放在如下所示的列表中

Https://help.github.com/articles/ignoring-files

用于删除当前文件,您可以创建 shell 脚本并从项目文件夹运行,如下所示

for file in `find *.orig -type f -print`
do
echo "Deleting file $file"
git rm $file -f
done

尝试 git clean更多的信息,你可以找到 给你给你

git rm Gemfile.lock.orig 还有其他你不需要的文件。 git commit --amend

为了彻底清除这些斑点, git gc --prune=0 --aggressive

在这种情况下,最好的解决方案是保持它的简单性,并摆脱那些独立于 git 的文件:

cd /your/repo/directory
find . -name '*.orig' -delete

或者,在 Windows/PowerShell 中,可以运行以下命令

cd \your\repo\directory
Get-ChildItem -Recurse -Filter '*.orig' | Remove-Item

你可以:

git config --global mergetool.keepBackup false

要了解更多信息,请参考 Git mergetool 生成不需要的. orig 文件

对于我来说,git clean -f删除了所有 * . oig 文件,并保留了之前已经存在的文件。

这就是合并后的情形(几乎) :

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
(use "git push" to publish your local commits)


Untracked files:
(use "git add <file>..." to include in what will be committed)


.idea/codeStyles/
.idea/misc.xml.orig

在合并之前,.idea/codeStyles/就已经作为一个未跟踪的文件存在了,.idea/misc.xml.orig(以及更多)不得不被删除。

= > 使用 git clean -f:

$ git clean -f
Removing .idea/misc.xml.orig

结果是:

$ git status
On branch feature/xyz
Your branch is ahead of 'origin/feature/xyz' by 568 commits.
(use "git push" to publish your local commits)


Untracked files:
(use "git add <file>..." to include in what will be committed)


.idea/codeStyles/

你可以简单地做 git status -s | grep "\.orig$" | awk '{print $2}' | xargs -n1 -r echo rm

;

git status -s允许您获得与索引相关的所有修改/丢失的文件

grep "\.orig$"过滤掉文件,通过“ . orig”保持结尾

awk '{print $2}'列出文件名(跳过 git 信息,例如 A、 M、 ? ?)

xargs -n1 -r echo rm在每个参数上打印删除命令(- n1: 一次一个,-r: 空时跳过)只需复制和粘贴命令,双重检查要删除的文件。

不幸的是,git clean对我不起作用,因为我已经将 *.orig添加到我的全局 gitignore 文件中,所以它们也被忽略了。即使运行 git clean -x也不行,因为我不希望被忽略的文件的 所有被删除。git clean -i是很有帮助的,但是我真的不想去检查每一个文件。

但是,我们可以使用排除模式并取消匹配:

git clean -e '!*.orig' --dry-run

然后,当你有信心的时候,通过 force标志来真正地删除它们:

git clean -e '!*.orig' -f

基于 Leorleor 的评论

您可以使用 pre-commit hook 自动化这个过程。要做到这一点,只需进入您的项目文件夹,并搜索隐藏文件夹 .git。 在它里面,你会找到 hooks目录,打开它并且 cr8一个名为 pre-commit的文件,下一个包含:

echo "Looking for .orig files to remove"
pwd=$(pwd)
find . -name '*.orig' -delete
echo "Done removing .orig files"

现在,它将清理源文件总是在您提交的东西,所以没有必要保持它在吉蒂诺尔。

对于使用 窗户机的用户,可以在 PowerShell 中执行这个命令。

ls -r *.orig | rm -f

或者如果你喜欢冗长的 PowerShell

Get-ChildItem -Recurse *.orig | Remove-Item -Force