8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Git-合并期间忽略文件

AlgorithmAce 2月前

96 0

我在远程 beanstalk 服务器上有一个名为 myrepo 的仓库。我将其克隆到本地机器。创建了两个附加分支:staging 和 dev。将这些分支也推送到远程。现在:本地...

在远程服务器上 myrepo 调用的 repo beanstalk

我将其克隆到本地机器。创建了两个额外的分支: staging 并将 dev 这些分支也推送到远程。

现在:

 local                   remote                   server
 --------------------------------------------------------  
 master  ==> Pushes to  `master`  ==> deployed to `prod`
 staging ==> Pushes to  `staging` ==> deployed to `staging`
 dev     ==> Pushes to  `dev`     ==> deployed to `dev`

我有一个名为的文件 config.xml ,它在每个分支上都是不同的。

我只想在合并期间忽略此文件。但我希望在签出或提交回购分支时包含此文件。

我想要这个的原因是,我们有一个部署脚本,可以拉取(签出)特定分支并部署到相应的服务器上。因此,我们需要 config.xml 在部署时将该特定分支的文件放入上述特定服务器中。

我猜 .gitignore 不会起作用。还有其他选择吗?请注意,忽略的文件应该是签出和提交的一部分,这很重要。它只应在合并期间被忽略。

谢谢!

帖子版权声明 1、本帖标题:Git-合并期间忽略文件
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由AlgorithmAce在本站《git》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 你找到解决办法了吗? git 属性只在文件合并的分支之间存在冲突的情况下才有用,所以它并不总是足够的。

  • hobs 2月前 0 只看Ta
    引用 3

    我最终找到了 git attributes 。尝试了一下。到目前为止有效。尚未检查所有情况。但它应该是解决方案。

    合并策略 - Git 属性

  • 但我发现这个 git-scm.com/book/ch7-2.html#Merge-Strategies

  • 这是 git 属性文档的合并策略部分的正确链接:git-scm.com/book/en/v2/...

  • 在 medium.com/@porteneuve/ 的一篇文章中找到了很好的解释……

  • @Brett,实际上,你可以让这个文件在每个分支上始终冲突,这样就可以避免因为没有冲突而自动合并。例如,在每个分支的文件中添加一行:{分店名称}

  • 我通过使用带有选项的 git merge 命令解决了这个问题 --no-commit ,然后明确删除了暂存的文件并忽略了对该文件的更改。例如:假设我想忽略任何更改,请 myfile.txt 按如下方式进行:

    git merge --no-ff --no-commit <merge-branch>
    git reset HEAD myfile.txt
    git checkout -- myfile.txt
    git commit -m "merged <merge-branch>"
    

    如果您有一个要跳过的文件列表,则可以将语句 2 和 3 放入 for 循环中。

  • 如果您希望在快进策略中合并时文件不被覆盖,我会添加 '--no-ff'。

  • 那么 git reset HEAD myfile.txt 到底是做什么的?它对我们的目标有什么帮助?

  • @AndroidDev 您可以执行以下操作: for i in `ls myfile.txt myfile_2.txt`; do echo $i; git reset HEAD $i && git checkout -- $i; done

  • @Kid_Learning_C :git reset HEAD myfile.txt 取消暂存文件(该文件在 --no-commit 合并后暂存)

  • .gitattributes - 是存储库的根级文件,用于定义子目录或文件子集的属性。

    您可以指定属性来告诉 Git 对特定文件使用不同的合并策略。在这里,我们想要 config.xml 为我们的分支保留现有的。我们需要 merge=foo config.xml 文件 .gitattributes 设置

    merge=foo 如果发生合并冲突,告诉 git 使用我们的(当前分支)文件。

    1. p3

    2. 页面4

       <pattern> merge=foo

      页面5

       config.xml merge=foo
    3. p6

       $ git config --global merge.foo.driver true

    如果您合并 stag 表单 dev 分支,则合并不会与文件发生冲突 config.xml ,而 stag 分支的 config.xml 将保留您最初的版本。

    更多参考: merge_strategies

  • AJM 2月前 0 只看Ta
    引用 14

    @IgorYalovoy:如果没有冲突……好吧,这有点棘手,因为它实际上是从哈希 ID 开始的,但是:如果 config.xml 从合并基础到任一分支提示版本完全不变,Git 只会采用更改后的版本,而不查看 merge.ours.driver 设置。所以你的担心是正确的。

  • 引用 15

    “ours” 似乎是新引入策略的任意名称。我发现这很令人困惑,因为他们的策略是内置合并策略。但似乎可以这样写merge=foo,然后git config --global merge.foo.driver true,它会以相同的方式工作。

  • 使用以下命令将 .gitattributes 文件添加到主分支merge=ours,然后运行 ​​git config --global merge.ours.driver true 效果很好。dev 中的配置文件未合并到 main 中的配置文件中。不幸的是,在合并过程中 .gitattributes 文件被删除(因为它在 dev 中不存在)!如何避免这种情况?只需将相同的 .gitattributes 文件添加到 dev 即可? ours 值会引起冲突吗?

  • 引用 17

    例子:

    1. 你有两个分支: master , develop
    2. 您在 develop 分支中创建了文件并希望在合并时忽略它

    代码:

    git config --global merge.ours.driver true
    git checkout master
    echo "path/file_to_ignore merge=ours" >> .gitattributes
    git merge develop
    

    您还可以忽略具有相同扩展名的文件

    例如所有带有 .txt 扩展名的文件:

    echo "*.txt merge=ours" >> .gitattributes
    
  • 您可以先使用 git merge --no-commit ,然后按照您喜欢的方式编辑合并,即取消暂存 config.xml 或任何其他文件,然后提交。我怀疑您会想在那之后使用钩子进一步自动化它,但我认为至少手动进行一次是值得的。

  • git 属性是否提供了任何直接的解决方案?我无法理解这一点。git-scm.com/book/en/…

  • 正如许多人评论的那样,应该注意的是, 接受的答案 及其副本(使用针对特定文件或文件的自定义合并策略) 仅在存在实际合并冲突的情况下才有效 .

    以下 2 个简单情况不会导致合并冲突,因此提交会被合并:

    • 你有一个 config.xml 文件在功能分支中,而不是在主分支中。你想在合并期间将其排除
    • 文件 config.xml 均基于同一次提交。新代码已添加到功能文件中。

    要么使用 merge --no-commit 所演示的方法 unmesh-gurjar ,要么简单地挑选个别提交到 master。后者当然相当麻烦,并且还存在其他一些缺陷(新的 SHA1 ID 等)。

返回
作者最近主题: