如何在从git存储库合并后删除.orig文件?
在合并过程中如何在我的git存储库中检查.orig文件,这些文件现在显示在已修改和未跟踪的扇区中。但是我不想再在我的存储库中保存这些文件了。如何做到这一点如何在从git存储库合并后删除.orig文件?,git,Git,在合并过程中如何在我的git存储库中检查.orig文件,这些文件现在显示在已修改和未跟踪的扇区中。但是我不想再在我的存储库中保存这些文件了。如何做到这一点 modified: Gemfile.lock.orig # modified: Gemfile.orig # modified: app/assets/images/bg_required.png.orig # modified: app/assets/javascripts/app
modified: Gemfile.lock.orig
# modified: Gemfile.orig
# modified: app/assets/images/bg_required.png.orig
# modified: app/assets/javascripts/application.js.orig
etc...
任何帮助都将不胜感激 git rm
还可以将要忽略的文件/目录添加到.gitignore文件。您可以使用.gitignore忽略文件 只需将*.orig放入列表中,如下所示 要删除当前文件,可以创建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提交——修改
要彻底清除这些斑点,
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 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
导致:
$ 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状态
分支上的特征/xyz
您的分支比“origin/feature/xyz”提前568次提交。
(使用“git push”发布本地提交)
未跟踪的文件:
(使用“git add…”包含在将提交的内容中)
.创意/编码风格/
您只需执行git status-s | grep“\.orig$”| awk'{print$2}'| xargs-n1-r echo rm
TL;博士
git status-s
允许您获取与索引相关的所有修改/丢失的文件
grep“\.orig$”
过滤掉文件,以“.orig”结尾
awk'{print$2}'
列出文件名(跳过git信息,例如A、M、?)
xargs-n1-r echo rm
在每个参数上打印remove命令(-n1:一次一个,-r:空时跳过)只需复制并粘贴命令,并仔细检查要删除的文件。不幸的是git clean
对我不起作用,因为我已将*.orig
添加到全局gitignore文件中,所以他们也被忽略了。即使运行git clean-x
也不好,因为我不想删除所有被忽略的文件gitclean-i
很有帮助,但我真的不想查看每个文件
但是,我们可以使用排除模式并否定匹配。使用此命令预览:
git clean -e '!*.orig' --dry-run
然后,当您有信心时,传递force
标志以真正删除它们:
git clean -e '!*.orig' -f
基于您可以使用预提交钩子自动化此过程。为此,只需进入项目文件夹,搜索隐藏的文件夹
.git
。
在它里面你会找到钩子
目录,打开它,cr8一个名为预提交
的文件,下一个包含:
echo "Looking for .orig files to remove"
pwd=$(pwd)
find . -name '*.orig' -delete
echo "Done removing .orig files"
现在,它将在您提交某些内容之前清理原始文件,因此无需将其保留在gitignore中。可能重复@ziu,我想删除存储库中已经存在的文件,这些文件由git merge或其他开发人员签入。我错过了关于签入文件的部分。但是,.orig文件是由mergetool编写的。在我看来,这是一个非干净的冲突解决方案。你需要从整个历史记录中完全删除该文件吗?请检查一下,虽然他肯定可以这样做,但在这里这样做是不对的:)我认为这是一个好主意,因为它保留了备份,但不会干扰files@akazemis-你会这么想的,但是,当你搜索代码时,你看到的搜索结果是你想要的两倍(这会让你对最新代码中的内容产生错误的认识)。这是如此罕见,我宁愿生活在没有原始文件的危险中。最好定期提交。我可以清理未跟踪的文件,但是删除存储库中已经存在的文件怎么样呢?您必须首先从存储库中删除文件
git rm
,然后提交。然后将*.orig文件添加到git ignore中。我认为这是一个比标记为answer的解决方案更好的解决方案。git clean-I
非常好。它将为您提供一个将被删除的文件列表,并为您提供如何处理该列表的选项(过滤列表,能够删除列表上的所有内容,以及一些其他选项)。您可以使用git clean with patterns帮助仅删除文件*.orig文件:git clean-f-e'*.'-e'!*。orig'
只有一个排除模式,但它对负面模式有一点支持。因此,我们可以排除所有文件*.
,然后取消仅排除*.orig
文件。git-rm
只列出它们。然后,您需要列出所有文件,或者使用类似find的工具将它们传递给git-rm,或者使用shell glob并循环它们。Git不复制此标准Unix命令行功能。orig文件不会添加到存储库中,因此无需使用Git rm
,只需使用rm
instead@linquizebutgit rm Gemfile.lock.orig的提交将使用amend进入最后一次提交,对吗?有没有其他方法可以不提交此类文件?如果出现谓词错误,请使用:find-名称“*.orig”| xargs rm-f正如警告一样,使用“查找-删除”可能很危险。请检查目录(在本例中为“.”)是否正确,以确保您只删除了您想要删除的内容。git clean-df
无法做到这一点是很痛苦的。为什么我们必须手动清理它留下的垃圾?Windows呢?@Panzercrisis如果你使用Windows,你可能已经有了一个终端仿真器,可以通过它与Git交互。我推荐“gitforwindows”,它包含BASH和所有其他常用工具
echo "Looking for .orig files to remove"
pwd=$(pwd)
find . -name '*.orig' -delete
echo "Done removing .orig files"