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

Fel*_*xyz 221 git version-control

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

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

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

如何让git忘记目标目录?

Gor*_*son 516

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

git rm -r --cached <your directory>

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

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

  • gitignore用于确定git将要注意的未跟踪文件; 它与已被跟踪的文件无关.如果用户想要跟踪被忽略的文件,git会允许它们.这可以使用`add -f`来完成,也可以是你的情况.正如戈登所说,这可以防止你意外地删除一堆文件 - 存储库是主列表,而不是gitignore.这也让你可以手动跟踪一些通配符规则会忽略的东西,这些东西我觉得很有用. (15认同)
  • `-r` 选项不是“导致删除目录下的所有文件”,而是递归子目录。 (2认同)

jon*_*one 75

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

git update-index --assume-unchanged path/to/file.txt
Run Code Online (Sandbox Code Playgroud)

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

  • @Rhys反转它:`git update-index --no-assume-unchanged dirname/**/*` (3认同)
  • 虽然 OP 可能要求提供一个目录,但这正是我正在寻找的 - 忽略对单个签入文件的进一步更改;谢谢! (2认同)
  • 要完全忽略目录,请使用 'git update-index --assume-unchanged dirName/* '。我花了一段时间才找到语法,这里需要'*' (2认同)
  • 如何扭转这一局面? (2认同)

Ced*_*Ced 5

TL;DR 清理你的 git 存储库并确保所有被忽略的项目确实被忽略:

git rm -r --cached .
git add .
git commit -m "Clean up ignored files"
Run Code Online (Sandbox Code Playgroud)

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

要进一步阅读此内容