我有一个git存储库,仅用于保存几个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我创建了一个脚本来从另一个结构化目录复制这些资产,该目录有几级子目录。
现在我只想让git跟踪(源)分层文件结构,而(目标)平面目录(所有文件都在一个堆中)应该被忽略。
我已经将目标目录添加到.gitignore中,但是git仍然在跟踪其中的更改。我认为如果我在目标目录中提交旧文件的删除,git可能会停止跟踪新内容(由脚本复制),但它不会。
如何让git忘记目标目录?
我有一个git存储库,仅用于保存几个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我创建了一个脚本来从另一个结构化目录复制这些资产,该目录有几级子目录。
现在我只想让git跟踪(源)分层文件结构,而(目标)平面目录(所有文件都在一个堆中)应该被忽略。
我已经将目标目录添加到.gitignore中,但是git仍然在跟踪其中的更改。我认为如果我在目标目录中提交旧文件的删除,git可能会停止跟踪新内容(由脚本复制),但它不会。
如何让git忘记目标目录?
这个命令将导致git取消跟踪你的目录和它下的所有文件,而不实际删除它们:
Git rm -r——缓存<你的目录>
r选项会删除目录下的所有文件。
——cached选项会导致文件只从git的索引中删除,而不是从你的工作副本中删除。默认情况下,git rm <file>将删除<file>。
好吧,似乎您必须首先在目录完全为空(既不是旧文件也不是新文件)的情况下进行签入,之后添加的任何文件都将被忽略。如果你在提交前删除旧文件add和新文件,新文件将被添加到repo,尽管它们应该被忽略。
至少,在这种情况下,这对我有用。如果有人能就目前的情况提供更多的见解,那就太好了。
如果你需要一个跟踪文件(检入),但不想跟踪文件的进一步更改,同时将其保存在本地存储库和远程存储库中,可以使用:
git update-index --assume-unchanged path/to/file.txt
在此之后,对该文件的任何更改将不再显示在git状态中。
不知道这算不算,还是说我是个坏人,但事实就是这样。
我添加了*Generated*到根文件。gitignore 我提交了我想保留的文件GeneratedFile.Whatever.ext.CheckedIn 我做了一个git挂钩后签出调用一个powershell脚本这样做:
dir *。CheckedIn -Recurse | %{收到的美元。永久保存
我确实觉得自己有点糟糕……但它确实有效。
TL;DR清理你的git存储库,并确保所有你忽略的项目确实被忽略:
git rm -r --cached .
git add .
git commit -m "Clean up ignored files"
注意:您不需要指定目录,这样您就可以清理整个远程repo。
要进一步阅读这篇文章