忽略Git目录而不对远程进行更改

3
我需要忽略一个目录中的本地和远程更改。例如,我有一个远程 git 集合,其中包含:
  • templates/T1
  • templates/T2
  • templates/Tn
我想设置本地 git,只跟踪 T2,并忽略其他文件。
我尝试的方法是:
    git rm -r --cached templates/T1
    git rm -r --cached templates/Tn

然后将此添加到模板目录中的 .gitignore 文件中。
    /*
    !/T2

但是在这样做后,我得到了一堆被标记为已删除的文件,它们想要被推送到远程,但我不想这样。我需要保持远程拥有所有模板,但在这个单独的本地机器上,我只需要跟踪一个模板。

1
相关链接:https://dev59.com/3nE85IYBdhLWcg3wqVT4 - Sascha Wolf
你只需要跟踪一个模板还是只需要检出一个模板? - Sascha Wolf
“一个已经签出的”可能是更好的说法。 - Dexa
在这种情况下,请查看我的答案 - Sascha Wolf
3个回答

3

如果要忽略git中的某些文件,则应将其从远程服务器中删除并添加到.gitignore中。所以这种方法对您不起作用。

如果想在远程服务器上保留文件但不跟踪它们,可以使用 git update-index --assume-unchanged files 。 这将在远程服务器上保留一些T1,Tn文件的初始版本,并且不会在本地repo上跟踪它们。 因此, git status 不会列出更改的T1,Tn。


2

即使您将文件添加到.gitignore或排除列表中,也不能忽略已经被跟踪的文件。
您可以编写一个pre-commit钩子来还原您不想跟踪的目录中的任何更改。

但是,它们仍然存在于您的存储库中!您不能删除它们而不影响git。

希望这有所帮助!


1

由于您在评论中提到只需要一个模板被检出,我建议您使用Git的sparse-checkout功能。

您可以参考这个答案,其中有更详细的解释,但我将为您提供一个特定的示例。


  1. 使用 git config core.sparsecheckout true 激活 sparse-checkout
  2. .git/info 中创建一个 sparse-checkout 文件; 你需要指定想要检出的文件的模式

在你的情况下,这个文件可能看起来像这样:

*               # Add everything for checkout
!templates/     # Don't checkout the content of templates
templates/T2    # Checkout T2 in templates
  1. 更新您的工作树 git read-tree -m -u HEAD

最后一个命令应该在您的存储库根目录中执行,具有干净的工作树(没有更改的文件等)。

这应该使您的工作树的templates目录除了T2文件之外为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接