使用gitignore忽略(但不删除)文件

213*_*312 95 git version-control

我在我的git repo中有一个tmp目录我想仍然存在,但是被忽略了.我添加了它.gitignore,但git status仍然告诉我有关该目录中文件的更改.我试过了git rm -r --cached,但是它将它从远程仓库中删除了.如何停止跟踪对此目录的更改,但仍然允许它存在?我还需要1个文件做到这一点,但变化是,在也出现git status之后.gitignore荷兰国际集团他们.我该怎么办?

duc*_*cin 176

相反的.gitignore,你可以通过运行以下命令来更新本地的Git仓库:

git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在原始仓库中跟踪文件.您可以在本地仓库中修改它,git永远不会将其标记为已更改.阅读更多:

  • 我对git的爱可能只增加了一倍. (21认同)
  • 您可以使用`git update-index --no-assume-unchanged <file>`恢复它.如果你想列出它们`git ls-files -v | grep'^ h'`. (11认同)
  • 有没有办法将其推送到远程仓库? (4认同)
  • 这应该是公认的答案.感谢您加入. (2认同)
  • 嗯我宁愿将文件标记为"它不是git文件,永远不会与git同步,即使在某些其他回购" (2认同)

Mic*_*ant 11

在允许文件存在的同时忽略对文件所做的更改的确切目的.gitignore.因此,添加文件(或目录).gitignore是您唯一需要做的事情.

但是你的问题是git已经在跟踪你想要忽略的文件,.gitignore并且不适用于跟踪的文件.停止跟踪的唯一方法是告诉git删除它们.通过使用git rm --cached,可以防止git删除本地文件,但获取更改的任何其他存储库都将应用删除.我认为没有办法从你自己的存储库中避免这种情况.您必须在其他存储库上执行某些操作,否则将删除这些文件.

要防止在其他存储库中删除,您可以:

  • (显然)在某处备份文件,提取更改并恢复文件,
  • 或者提取更改之前git rm --cached提交文件和提交.Git很好地合并了两个删除,而没有触及已经未跟踪的文件.

  • 这不一定是真的("停止跟踪=删除文件").您仍然可以在回购中跟踪文件,而不是使用以下命令查看所做的更改:`git update-index --assume-unchanged <file>`.请查看:http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/ (6认同)

Mat*_*Mat 7

/.gitignore文件的目录名末尾添加一个,即

tmp/
Run Code Online (Sandbox Code Playgroud)

如果跟踪了该目录中的文件,则需要先告诉git忘记它们(在将dir添加到忽略列表之前).假设你没有任何重要的东西(即你可以抓它):

git rm -rf ./tmp/
git commit -m "untrack tmp dir"
mkdir tmp
echo tmp/ >> .gitignore
git add .gitignore ; git commit -m "add tmp/ to ignore list"
Run Code Online (Sandbox Code Playgroud)

不会跟踪该目录中的新文件.

--cached选项git rm仅适用于索引(或多或少有待更改).它对工作树或已跟踪或未跟踪的状态没有影响.


Gab*_*ley 5

.gitignore 对跟踪的文件没有影响。

您想要的是在 tmp/ 目录中的文件上设置假设未更改位。这里有一个很好的解释如何做到这一点:Git:仅取消跟踪本地存储库中的文件并将其保留在远程存储库中

另外,用于在目录中的所有文件上设置假设未更改的单行代码 - git update-index --assume-unchanged on directory


归档时间:

查看次数:

37400 次

最近记录:

9 年,3 月 前