忽略已经签入的目录内容?

我有一个只用于保存在几个项目中使用的graphics和声音文件的git仓库。 他们都在一个目录没有子目录。 现在我刚刚创build了一个脚本,将这些资源从另一个结构化的目录中复制过来,并具有几个子目录级别。

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

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

如何让git忘记目标目录?

这个命令会导致git解开你的目录及其下的所有文件,而不会实际删除它们:

git rm -r --cached <your directory>

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

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

如果您需要有一个跟踪的文件(签入),但不希望跟踪文件的进一步更改,同时将其保存在本地存储库以及远程存储库中,则可以使用以下操作:

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

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

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

 blah blah/* 

好吧,你似乎必须首先做一个完全空的目录(既不是旧文件也不是新文件),而且之后添加的任何文件都将被忽略。 如果您在提交之前删除旧文件添加和新的文件,新的文件将被添加到回购,尽pipe它们应该被忽略。

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