Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git合并期间,如何接受特定文件夹中的所有远程文件?_Git_Powershell_Merge_Gitignore_Posh Git - Fatal编程技术网

在git合并期间,如何接受特定文件夹中的所有远程文件?

在git合并期间,如何接受特定文件夹中的所有远程文件?,git,powershell,merge,gitignore,posh-git,Git,Powershell,Merge,Gitignore,Posh Git,我们在Windows Powershell上使用posh git进行源代码控制 我们在git repo中存储一些构建的程序集,这是一个不可取的位置。我知道所有关于你为什么不应该那样做的布道,但我们现在必须接受它。谢天谢地,他们在一个单独的解决方案中,但有时两个人同时在他们自己的分支中处理该解决方案,最后一个人将处理合并冲突。当然,这个过程是这样的: 人员A将其更改登录到develop上 人员B合并这些更改,其中包括程序集和 更新源代码 人员B解决冲突,因为必须确认每个冲突的版本 他们想保留的集会

我们在Windows Powershell上使用posh git进行源代码控制

我们在git repo中存储一些构建的程序集,这是一个不可取的位置。我知道所有关于你为什么不应该那样做的布道,但我们现在必须接受它。谢天谢地,他们在一个单独的解决方案中,但有时两个人同时在他们自己的分支中处理该解决方案,最后一个人将处理合并冲突。当然,这个过程是这样的:

  • 人员A将其更改登录到develop上
  • 人员B合并这些更改,其中包括程序集和 更新源代码
  • 人员B解决冲突,因为必须确认每个冲突的版本 他们想保留的集会。这既烦人又费时, 而且也没有必要,因为人员B将在 还是合并源代码吧
  • 人员B重建程序集并进行新的提交以完成 合并
  • 这些程序集位于我们的Repo:/Source/Foundation程序集中的文件夹中/

    人员B不能仅从远程获取所有更改,因为他们的分支可能有冲突的更改,但仅对/Source/Foundation Assemblies/文件夹执行“获取他们的”或“获取我的”将有帮助。这是git可以实现的吗

    命令行示例会很有帮助。通常情况下,合并只是:

    git merge develop
    
    我在想,也许可以.gitignore忽略/Source/foundationassemblies/文件夹,然后在合并后将其从.gitignore中删除,但这是三个步骤。如果我们能从命令行一次完成,那就太棒了


    感谢您的帮助

    您可以执行
    git merge develop-X thethers
    ,所有冲突都将占用远程分支的副本


    编辑:回顾您的问题,我发现您只想为特定子文件夹选择“他们的”。在这种情况下,在
    git merge develope
    之后,执行
    git签出——他们的/Source/Foundation程序集/
    。这将用“他们的”替换该文件夹的内容。然后只需
    git add/Source/Foundation Assemblies/
    就可以了。

    您有几种合并策略可以使用:

    决定 这只能使用3路合并算法解析两个头部(即当前分支和从中提取的另一个分支)。它试图仔细地检测交叉合并歧义,通常被认为是安全和快速的

    递归的 这只能使用3路合并算法解析两个头部。当有多个公共祖先可用于3路合并时,它将创建公共祖先的合并树,并将其用作3路合并的参考树。据报道,通过对取自Linux2.6内核开发历史的实际合并提交进行测试,可以减少合并冲突,而不会导致错误合并。此外,这还可以检测和处理涉及重命名的合并。这是拉取或合并一个分支时的默认合并策略

    “递归”策略可以采用以下选项:

    我们的 此选项通过支持“我们的”版本,强制冲突大块自动干净地解决。来自另一棵树的与我方不冲突的更改将反映到合并结果中。对于二进制文件,所有内容都取自我们这边

    这不应该与“我们的”合并策略混淆,后者甚至根本不看其他树包含什么。它丢弃其他树所做的一切,声明“我们的”历史包含其中发生的一切

    他们的 这与“我们的”相反

    甚至更多,但这些是主要的。

    在您的案例中,“正确”的方法是在提交合并之前重新生成程序集。我不明白你为什么不这样做。以下步骤应有效:

  • 解决并添加所有冲突源。那么在合并过程中发生的任何事情都不应该影响您提交的内容
  • 删除冲突的程序集文件。不需要对他们的git信息做任何事情,只需删除文件即可
  • 构建程序集
  • git添加准备好的程序集
  • 那就承诺吧。您得到的是合并,其中包括本地和远程更改
  • 编辑:尝试以下操作:

  • git-rm--force-r
  • 运行合并工具,现在它应该会提到二进制文件(
    kdiff3
    没有)
  • 生成程序集
  • git add
  • 承诺

  • 据我所知,我尝试用bash脚本复制您的案例。

    这看起来是正确的,但没有进行任何实际更改。我在查看前后完全相同的git状态:C:\Src\Repos\Estream\Source[crosstrack-69-63284-ssrs-reports+162~711-127!109 |+0~0-0!109]>。我运行的命令是:git checkout--theres'.\Foundation Assemblies',我也尝试了各种变体来正确表示“基础程序集”。单引号、双引号、开头不带“\”、结尾不带“\”等等……根据我的上述评论,可能值得注意的是,回购协议在我开始时处于冲突状态。这是我通常运行“gitmergetool”的地方;修复冲突,然后提交结果。@EricBurcham,您是否确保
    git签出后
    git添加
    文件夹--他们的
    ?是的。也许我错过了什么。我将重试此操作。我们使用Beyond Compare来解决合并冲突。我们通过键入“git mergetool”来调用它。Beyond Compare无法解决二进制差异,因此我们必须让数百个选项卡打开/关闭,并告诉git在每一个选项卡之后继续合并冲突。这很简单,但需要一段时间