【问题标题】:git not honoring git info excludegit 不尊重 git info exclude
【发布时间】:2017-07-17 14:31:45
【问题描述】:

我正在开发一个共享存储库,我想为自己排除某个目录下的所有文件。 所以我在$GIT_ROOT/.git/info/exclude做了一个条目

/path/to/folder/

在此之后,我使用

删除了索引
git rm -r --cached /path/to/folder/*

A git status 在此之后显示一长串已删除文件暂存等待提交。 我提交了更改,直到这里一切都很好,因为我所做的任何更改都不会被 git 跟踪。但我不能将同样的内容推送到remote,因为这会扰乱其他开发人员的工作回购。 在此之后,如果我从远程拉出,它会向我显示合并冲突modified by them/deleted by us。并使用git reset --hard origin/<branch_name> 再次开始跟踪文件夹。

这不能实现,因为我无法推送到远程吗?

【问题讨论】:

    标签: git github gitignore


    【解决方案1】:

    更稳健的解决方案是:

    • 将该文件夹移到您的存储库之外
    • 添加符号链接
    • 忽略带有git update-index --skip-worktree -- mysymlink 的符号链接
    • 在移动的文件夹中添加一个.gitignore(使用“*”模式)
    • 放置一个 sparce checkout 以便获取/下载该特定文件夹。

    .git/info/sparse-checkout内容:

    *
    !/path/to/mysymlink
    

    mysymlink 是我要忽略的文件夹的名称)

    在“git assume unchanged vs skip worktree - ignoring a symbolic link”查看更多信息


    OP shshnk 提到了in the comments 更简单的方法:

    我能够使用稀疏结帐来实现它。
    基本上我在.git/info/sparse-checkout 文件中提到了您提到的格式的文件夹名称。现在git 会忽略这些文件夹中的文件。

    【讨论】:

    • 谢谢!我能够使用sparse-checkout 来实现它。基本上我在.git/info/sparse-checkout 文件中提到了您提到的格式的文件夹名称。现在 git 会忽略这些文件夹中的文件。这对我有用。
    • @shshnk 太棒了!我已将您的评论包含在答案中以提高知名度。
    【解决方案2】:

    问题是您将文件提交为“已删除”。这意味着任何想要合并您的更改的人都将删除这些文件。此外,如果任何人(未合并您的更改)修改了这些文件,当您合并来自其他开发人员的更改时,您将遇到树冲突。在这种情况下,你能做的最好的事情就是告诉 git 关心这些文件,同时将它们保留在项目中。这是通过git update-index --assume-unchanged完成的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 2019-06-18
      相关资源
      最近更新 更多