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

5kgi1eie  于 2023-05-05  发布在  Git
关注(0)|答案(6)|浏览(238)

我有一个git存储库,它只用于保存几个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我创建了一个脚本来从另一个结构化目录复制这些资产,该目录有几个级别的子目录。
现在我只想让git跟踪(源)分层文件结构,而(目标)平面目录(所有文件都在一堆中)应该被忽略。
我已经将目标目录添加到.gitignore,但是git仍然在跟踪其中的变化。我想如果我提交删除目标目录中的旧文件,git可能会停止跟踪新内容(由脚本复制),但它没有。
如何让git忘记目标目录?

omvjsjqw

omvjsjqw1#

这个命令会导致git取消跟踪你的目录和它下面的所有文件,而不会真正删除它们:
git rm -r --cached <your directory>
-r选项将删除目录下的所有文件。
--cached选项会导致文件只从git的索引中删除,而不是从工作副本中删除。默认情况下,git rm <file>会删除<file>

55ooxyrt

55ooxyrt2#

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

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

在此之后,对该文件的任何更改将不再显示在git status中。
要撤消此操作,请使用以下命令:

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

r1zk6ea13#

TL;DR来清理你的git仓库,并确保所有被忽略的项目都被忽略了:

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

注意:您不需要指定目录,这样您将清理整个远程存储库
阅读this

ukxgm1gy

ukxgm1gy4#

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

blah 
blah/*
t2a7ltrp

t2a7ltrp5#

不知道这算不算,还是让我成为一个坏人,但它来了。
1.我将*Generated*添加到根.gitignore文件中
1.我提交了要保留为GeneratedFile.wher.ext的文件。已签入
1.我在post checkout上做了一个git钩子来调用powershell脚本,这样做:
dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}
我确实觉得自己有点不好。。但它确实有效。

xmjla07d

xmjla07d6#

好的,看起来你必须首先在目录完全空的情况下进行签入(既不是旧文件也不是新文件),之后添加的任何文件都将被忽略。如果在提交前删除旧文件和新文件,新文件会被添加到存储库中,尽管它们应该被忽略。
至少,在这种情况下,这对我很有效。如果有人能提供更多关于正在发生的事情的见解,那就太好了。

相关问题