我需要忽略对目录的本地和远程更改。例如,我有远程git设置:
我想设置本地git,以便它仅跟踪T2,并忽略其他。
我试过的是:
git rm -r --cached templates/T1
git rm -r --cached templates/Tn
然后将其添加到模板目录中的.gitignore
/*
!/T2
但是在这之后我得到了一堆标记为已删除的文件,希望将其推送到远程,我不希望这样。我需要远程来保持所有模板,但在这台本地机器上我只需要跟踪一个模板。
答案 0 :(得分:3)
要忽略git中的某些文件,应将其从远程服务器中删除并添加到.gitignore。所以这种方法对你不起作用。
要将文件保留在远程服务器上但不能跟踪它们,您可以使用git update-index --assume-unchanged files
。这将在远程控制器上保留T1,Tn文件的初始版本,并且不会在本地存储库上跟踪它们。因此git status
不会列出已更改的T1,Tn。
答案 1 :(得分:2)
即使将已添加的文件添加到.gitignore或排除,也无法忽略已经跟踪的文件
您可以做的是编写一个预提交钩子,它可以恢复您不想跟踪的目录中的任何更改。
但是您将在它们的存储库中拥有它们!你不能在不打扰git的情况下删除它们。
希望它有所帮助!
答案 2 :(得分:1)
由于您在评论中说您只需要一个模板已签出,我建议您使用gits sparse-checkout
。
你可以看一下this answer,它会更详细地解释它,但我会为你的案例提供一个具体的例子。
sparse-checkout
git config core.sparsecheckout true
sparse-checkout
中创建.git/info
个文件;您需要为想要结帐 在您的情况下,此文件可能如下所示:
* # Add everything for checkout
!templates/ # Don't checkout the content of templates
templates/T2 # Checkout T2 in templates
git read-tree -m -u HEAD
最后一个命令应该在你的存储库的根目录中执行,它有一个干净的工作树(没有更改的文件等)。
除了templates
文件之外,这应该使您的工作树T2
目录为空。