我有我的git仓库中的tmp目录我想仍然存在,但被忽略。我将它添加到.gitignore
,但git status
仍然告诉我有关该目录中文件的更改。我试过git rm -r --cached
,但是它从远程回购中删除它。我如何停止跟踪对此目录的更改,但仍然允许它存在?我还需要为1个文件执行此操作,但对.gitignore
之后的更改也会显示在git status
之后。我该怎么办?使用gitignore忽略(但不删除)文件
回答
将一个/
在目录名的末尾在.gitignore
文件,即
tmp/
如果已跟踪该目录内的文件,你需要告诉混帐约他们先忘了(你加之前目录到忽略列表)。假设你没有什么重要的东西(即你可以划伤它):
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"
该目录中的新文件将不被跟踪。
--cached
选项到git rm
只适用于索引(等待更改或多或少)。它对工作树或已跟踪或未跟踪的状态没有影响。
忽略对文件所做的更改并允许它们存在的确切目的是.gitignore
。因此,将文件(或目录)添加到.gitignore
是唯一必须做的事情。
但你的问题是,git已经在跟踪你想忽略的文件,而.gitignore
不适用于跟踪文件。停止这种跟踪的唯一方法是告诉git删除它们。通过使用git rm --cached
,您可以防止git删除本地文件,但获取您的更改的任何其他存储库都将应用删除。我不认为有一种方法可以从您自己的存储库中避免这种情况。您必须对其他存储库执行某些操作,或接受将被删除的文件。
要防止对方库中,您可以去除:
- (显然)备份文件的地方,拉更改并恢复文件,
- 或也
git rm --cached
文件和之前提交拉动你的改变。 Git将很好地合并两个删除而不触及已经未记录的文件。
这并非必须如此(“停止跟踪=移除文件”)。您仍然可以在回购站中跟踪文件,而不会看到任何更改,使用:'git update-index --assume-unchanged
这听起来像你想跟踪的文件(例如index.php
),将其添加到远程仓库,然后驻足观望跟踪它,同时保持在文件中远程(即保持index.php
不变的远程回购同时在本地进行更改)。
从我的理解,git不能这样做。您可以跟踪文件,也可以不跟踪文件。如果您跟踪文件,它会存在于远程仓库中,并在您对其进行更改时进行更改。如果你不跟踪一个文件,它不存在于远程仓库中。
因为不可能用git来完成你想要的工作,所以根据你的具体情况,可能还有其他解决方案。例如,当您在本地更改它时,为什么不需要index.php
更改为远程?文件中是否有用户特定的设置?如果是这样的话,你可以这样做:
cp index.php index_template.php
git rm --cached index.php
,你希望它出现在远程回购现在编辑index_template.php是。将一些内容添加到自述文件中,告诉使用存储库的人员,一旦克隆它们,他们必须将index_template.php复制到index.php并进行编辑以满足他们的需求。
git add index_template.php
git add README
git commit -m 'added template index.php file'
git push
当某人克隆您的回购时,他们必须创建自己的index.php
。你已经使它们变得容易了:只需将index_template.php
复制到index.php
并使用计算机特定的设置对其进行修改即可。
.gitignore对追踪文件没有影响。
你想要的是在tmp /目录中的文件上设置假设不变的位。这里有一个很好的解释:Git: untrack a file in local repo only and keep it in the remote repo
此外,在目录中的所有文件设置假设 - 一行 - git update-index --assume-unchanged on directory。
相反的.gitignore
,您可以通过运行以下命令来更新本地的Git仓库:
git update-index --assume-unchanged <file>
在这种情况下,文件处于原点回购进行跟踪。你可以在你的本地仓库修改它,git永远不会将它标记为已更改。更多详情:
我对git的热爱可能会增加一倍。 – 2013-06-17 17:55:17
这应该是被接受的答案。感谢您的链接。 – Gowiem 2013-07-17 17:56:37
有没有办法将其推送到远程回购? – 2013-09-03 05:31:21
- 1. .gitignore不会忽略文件
- 2. .gitignore不忽略文件“config.inc.php”
- 3. Git忽略文件,但不删除它
- 4. 混帐:删除的.gitignore文件后,忽略文件
- 5. 如何使用.gitignore来忽略文件
- 6. .gitignore仍然忽略删除的项目
- 7. 删除并忽略git中的文件,但不要删除everywere
- 8. git GUI忽略.gitignore文件?
- 9. .gitignore没有忽略文件
- 10. 如何忽略.gitignore文件?
- 11. .gitignore文件忽略所有文件但不嵌套
- 12. .gitignore - 忽略文件夹排除被忽略的困难
- 13. gitignore文件不会忽略和git rm实际上删除文件
- 14. Gitignore不会忽略的子文件夹
- 15. .gitignore不会忽略.cs.meta文件
- 16. 不包括的.gitignore文件忽略
- 17. .gitignore in cakephp:忽略所有文件,但文件名为空
- 18. svn忽略不删除文件?
- 19. 的.gitignore不能忽略的所有文件夹除外
- 20. GitExtensions忽略.gitignore
- 21. Git恢复忽略文件,使用git clean删除所有忽略文件-fX
- 22. git的添加/删除承诺并不仅仅是忽略的.gitignore忽略文件
- 23. gitignore不工作 - 被忽略?
- 24. .gitignore不会忽略目录
- 25. 如何忽略的.gitignore .ENV文件laravel5.2
- 26. phing untar任务忽略.gitignore文件
- 27. 的.gitignore没有忽略文件夹
- 28. 忽略文件没有编辑.gitignore
- 29. .gitignore中的Github和非忽略文件
- 30. global gitignore被忽略
请写下究竟是什么你的.gitignore文件看起来像? – kdehairy 2012-07-25 06:25:20