忽略已登记的目录的内容?

时间:2009-08-25 16:10:27

标签: git version-control

我有一个git存储库,它只用于存放几个项目中使用的图形和声音文件。它们都在没有子目录的一个目录中。现在我刚刚创建了一个脚本,用于将这些资产从另一个结构化目录中复制,具有多个子目录级别。

现在我只希望git跟踪(源)分层文件结构,并且应忽略(目标)平面目录(包含一堆中的所有文件)。

我已将目标目录添加到.gitignore,但git仍在跟踪其中的更改。我想如果我提交删除目标目录中的旧文件,git可能会停止跟踪新内容(由脚本复制),但它没有。

如何让git忘记目标目录?

6 个答案:

答案 0 :(得分:514)

此命令将导致git取消跟踪您的目录及其下的所有文件,而不实际删除它们:

git rm -r --cached <your directory>

-r选项会导致删除目录下的所有文件。

--cached选项导致只从git的索引中删除文件,而不是工作副本。默认情况下,git rm <file>会删除<file>

答案 1 :(得分:72)

如果您需要跟踪文件(已签入),但不想跟踪文件的进一步更改,同时将其保留在本地存储库以及远程存储库中,则可以通过以下方式完成:

git update-index --assume-unchanged path/to/file.txt

之后,对此文件的任何更改都将不再显示在git status

答案 2 :(得分:4)

对于添加到git的名为blah/的子目录,以下两项似乎都可以忽略blah/中的新文件。添加到.gitignore:

blah 
blah/*

答案 3 :(得分:0)

不知道这是否使我成为一个坏人,但还是成功了。

  1. 我将*Generated*添加到了.gitignore根文件中
  2. 我提交了要保留为GeneratedFile.Whatever.ext的文件。 CheckedIn
  3. 我在结帐后制作了一个git hook来调用执行此操作的powershell脚本:

dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}

我确实对自己感到难过...但这确实有效。

答案 4 :(得分:0)

TL; DR清理git存储库,并确保 ALL 确实忽略了您忽略的项目:

git rm -r --cached .
git add .
git commit -m "Clean up ignored files"

注意:您无需指定目录,这样就可以清理整个远程存储库

要进一步阅读this

答案 5 :(得分:-1)

好吧,您似乎必须首先检查目录是否完全为空(既不是旧文件也不是新文件),之后添加的任何文件都将被忽略。如果在提交之前删除旧文件add和new文件,新的文件会被添加到repo中,尽管它们应该被忽略。

至少,在这种情况下,这对我有用。如果有人能够提供有关正在发生的事情的更多信息,那仍然会很棒。