我有一个git存储库,该存储库仅用于保存多个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我刚刚创建了一个脚本,以将这些资产从具有多个子目录级别的另一个结构化目录中复制过来。
现在,我只希望git跟踪(源)分层文件结构,并且(目标)平面目录(所有文件都放在一堆中)应该被忽略。
我已经将目标目录添加到.gitignore中,但是git仍在跟踪其中的更改。我以为如果我删除了目标目录中的旧文件,git可能会停止跟踪新内容(由脚本复制),但事实并非如此。
如何使git忘记目标目录?
我有一个git存储库,该存储库仅用于保存多个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我刚刚创建了一个脚本,以将这些资产从具有多个子目录级别的另一个结构化目录中复制过来。
现在,我只希望git跟踪(源)分层文件结构,并且(目标)平面目录(所有文件都放在一堆中)应该被忽略。
我已经将目标目录添加到.gitignore中,但是git仍在跟踪其中的更改。我以为如果我删除了目标目录中的旧文件,git可能会停止跟踪新内容(由脚本复制),但事实并非如此。
如何使git忘记目标目录?
Answers:
此命令将导致git取消跟踪目录及其下的所有文件,而没有实际删除它们:
git rm -r --cached <your directory>
该-r选项将导致删除目录下的所有文件。
该--cached选项导致仅从git的索引中删除文件,而不从工作副本中删除文件。默认情况下git rm <file>将删除<file>。
add -f您的情况来完成此操作。正如戈登所说,这可以防止您意外删除一堆文件-存储库是主列表,而不是gitignore。这也使您可以手动跟踪一些通配符规则会忽略的内容,这些都是我发现有用的。
-r选项不是“导致删除目录下的所有文件”,而是通过子目录递归。
如果需要跟踪文件(已签入),但又不想跟踪文件的进一步更改同时将其保留在本地存储库和远程存储库中,则可以使用以下方法完成:
git update-index --assume-unchanged path/to/file.txt
之后,对该文件的任何更改将不再显示在中git status。
git update-index --no-assume-unchanged dirname/**/*
好的,看来您必须首先在目录完全为空的情况下进行检入(无论新文件还是旧文件),之后添加的任何文件都将被忽略。如果在提交之前删除了旧文件add和new,则将新文件添加到存储库中,尽管应将其忽略。
至少,在这种情况下,这对我有用。如果有人可以对正在发生的事情提供更多的见解,那仍然会很棒。