Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在从git存储库合并后删除.orig文件?_Git - Fatal编程技术网

如何在从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

在合并过程中如何在我的git存储库中检查.orig文件,这些文件现在显示在已修改和未跟踪的扇区中。但是我不想再在我的存储库中保存这些文件了。如何做到这一点

    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"