Git忽略目录而不更改远程

时间:2015-02-23 10:36:16

标签: git gitignore

我需要忽略对目录的本地和远程更改。例如,我有远程git设置:

  • 模板/ T1
  • 模板/ T2
  • 模板/ TN

我想设置本地git,以便它仅跟踪T2,并忽略其他。

我试过的是:

    git rm -r --cached templates/T1
    git rm -r --cached templates/Tn

然后将其添加到模板目录中的.gitignore

    /*
    !/T2

但是在这之后我得到了一堆标记为已删除的文件,希望将其推送到远程,我不希望这样。我需要远程来保持所有模板,但在这台本地机器上我只需要跟踪一个模板。

3 个答案:

答案 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,它会更详细地解释它,但我会为你的案例提供一个具体的例子。


  1. 使用sparse-checkout
  2. 激活git config core.sparsecheckout true
  3. sparse-checkout中创建.git/info个文件;您需要为想要结帐
  4. 的文件指定模式

    在您的情况下,此文件可能如下所示:

    *               # 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
    2. 最后一个命令应该在你的存储库的根目录中执行,它有一个干净的工作树(没有更改的文件等)。

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