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存储库的文件_Git_Caching_Version Control_Gitignore_Git Rm - Fatal编程技术网

忽略已提交到Git存储库的文件

忽略已提交到Git存储库的文件,git,caching,version-control,gitignore,git-rm,Git,Caching,Version Control,Gitignore,Git Rm,我有一个已经初始化的Git存储库,我在其中添加了一个.gitignore文件。如何刷新文件索引以便忽略我要忽略的文件?如果文件已在版本控制中,则需要手动删除它们。要取消对已添加/初始化到存储库中的单个文件的跟踪,即。,停止跟踪文件,但不要将其从系统中删除使用:git rm--cached filename 要取消对.gitignore中的每个文件的跟踪,请执行以下操作: cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//"

我有一个已经初始化的Git存储库,我在其中添加了一个
.gitignore
文件。如何刷新文件索引以便忽略我要忽略的文件?

如果文件已在版本控制中,则需要手动删除它们。

要取消对已添加/初始化到存储库中的单个文件的跟踪,即。,停止跟踪文件,但不要将其从系统中删除使用:
git rm--cached filename

要取消对
.gitignore
中的每个文件的跟踪,请执行以下操作:

cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached
首先提交所有未完成的代码更改,然后运行以下命令:

git rm -r --cached .
这将从索引(暂存区域)中删除任何更改的文件,然后运行:

git add .
承诺:

git commit -m ".gitignore is now working"

要撤消
git rm--cached filename
,请使用
git add filename

确保在运行git add之前提交所有重要更改。 否则,您将丢失对其他文件的任何更改


是-
.gitignore
系统仅忽略当前不受git版本控制的文件

也就是说,如果您已经使用
git add
添加了一个名为
test.txt
的文件,那么将
test.txt
添加到
.gitignore
仍会导致跟踪对
test.txt
的更改


您必须首先
git rm test.txt
并提交该更改。只有这样,对
test.txt
的更改才会被忽略。

要取消对已添加/初始化到存储库中的文件的跟踪,即停止跟踪该文件,但不将其从系统中删除,请使用:
git rm--cached filename

不知道“answer”命令做了什么,我运行了它,非常失望。它递归地从git repo中删除每个文件

我来营救你

我做到了,因为我有我不想覆盖的未提交的本地文件

我遵循了这些步骤

git rm -r --cached .
git add .
git reset HEAD

之后,git会删除所有应该忽略的文件(*.swp)(在我的例子中是swp)。

我遇到的另一个问题是我放置了一个内联注释

tmp/*   # ignore my tmp folder (this doesn't work)
这很有效

# ignore my tmp folder
tmp/

删除.gitignore中的尾随空格


另外,请确保.gitignore中没有尾随空格。我问这个问题是因为我在寻找答案,然后我有一种奇怪的感觉,我应该打开编辑器,而不仅仅是猫叫。从末尾删除了一个额外的空格,然后噗噗它现在可以工作了:)

我发现.gitignore有一个奇怪的问题。一切都准备就绪,似乎都是正确的。my.gitignore被“忽略”的唯一原因是,行的结尾是Mac格式(\r)。因此,在以正确的行结尾保存文件(在vi中使用:set ff=unix)之后,一切都很顺利

多亏了你的回答,我才能够写下这篇小文章来改进它。我在我的.gitignore和repo上运行了它,没有任何问题,但如果有人看到任何明显的问题,请发表评论。这应该
git rm-r--cached
来自
.gitignore

cat $(git rev-parse --show-toplevel)/.gitIgnore | sed "s/\/$//" | grep -v "^#" | xargs -L 1 -I {} find $(git rev-parse --show-toplevel) -name "{}" | xargs -L 1 git rm -r --cached

请注意,您将得到大量的
致命错误:pathspec“”与任何文件都不匹配。这仅适用于尚未修改的文件。

如果您试图忽略对存储库中已跟踪的文件所做的更改(例如,您需要为本地环境更改的dev.properties文件,但您永远不希望签入这些更改),则您要做的是:

git update-index --assume-unchanged <file>
在我的服务器linux服务器上(在我的本地开发人员mac上不是这样),只要我不添加星号,目录就会被忽略:

www/archives/*


我不知道为什么,但它让我放松了几个小时,所以我想分享…

这里没有提到的另一个问题是,如果你在Windows记事本中创建了你的.gitignore,我发现它在其他平台上看起来像胡言乱语。关键是要确保在记事本中将编码设置为ANSI(或者像我一样在linux上创建文件)


从我这里的回答来看:

对于像我这样的慢家伙,可能还有另一个建议=)将.gitignore文件放入.git文件夹中的存储库根而不是。干杯

要仅从跟踪中删除一些特定文件:

git update-index --assume-unchanged path/to/file
如果您想再次开始跟踪它:

git update-index --no-assume-unchanged path/to/file                      

如果要停止跟踪文件而不从本地系统中删除该文件,我更喜欢忽略
config/database.yml
文件。只需尝试:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
现在,将此文件添加到
.gitignore
文件并提交更改。从现在起,git将不会跟踪对config/database.yml所做的任何更改

$ echo config/database.yml >> .gitignore

谢谢

正如dav_i所说,为了保持文件处于repo状态,并且在不创建额外提交的情况下将其从更改中删除,您可以使用:

git update-index --assume-unchanged filename

没有一个答案对我有用。

相反:

  • 将文件移出git控制的目录
  • 检查git中的删除
  • 将文件移回git控制的目录
  • 将文件移回后,git将忽略它。


    也适用于目录

    如果
    .gitignore
    似乎没有忽略未跟踪的文件,还需要记住一件事,那就是您不应该在与忽略相同的行上有注释。所以这没关系

    # ignore all foo.txt, foo.markdown, foo.dat, etc.
    foo*
    
    但这是行不通的:

    foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.
    

    .gitinore
    将后一种情况解释为“忽略名为
    的文件”“foo*#忽略所有foo.txt、foo.markdown、foo.dat等”
    ,当然,您没有这些文件。

    如果您需要停止跟踪大量被忽略的文件,可以组合一些命令:

    git ls文件-i--排除标准的| xargs-L1 git rm--缓存的

    这将停止跟踪被忽略的文件。如果要从文件系统中实际删除文件,请不要使用
    --cached
    选项。您还可以指定一个文件夹来限制搜索,例如:

    git ls-f
    
    # ignore all foo.txt, foo.markdown, foo.dat, etc.
    foo*
    
    foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.
    
    git rm -r --cached .