Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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_Github_Gitlab - Fatal编程技术网

一个项目,多个Git回购合并问题

一个项目,多个Git回购合并问题,git,github,gitlab,Git,Github,Gitlab,我正在从事一个希望具有以下工作流的项目: 开发团队通过内部Gitlab repo执行正常的git工作流,让我们将此repo称为“Alpha”,在某种程度上,我们对项目的状态感到满意,已经完成了内部审查,并希望将新代码推送到Github(repo“Beta”) 听起来很简单,除了我们都是git新手,并且尝试了几种不同的方法都没有成功之外。在一次挫败中,我们克隆了Beta版,在repo-Alpha文件表单中吹走了除.git-dir副本之外的所有文件(同样,除了.git-dir),执行提交、推送、声明

我正在从事一个希望具有以下工作流的项目:

开发团队通过内部Gitlab repo执行正常的git工作流,让我们将此repo称为“Alpha”,在某种程度上,我们对项目的状态感到满意,已经完成了内部审查,并希望将新代码推送到Github(repo“Beta”)

听起来很简单,除了我们都是git新手,并且尝试了几种不同的方法都没有成功之外。在一次挫败中,我们克隆了Beta版,在repo-Alpha文件表单中吹走了除.git-dir副本之外的所有文件(同样,除了.git-dir),执行提交、推送、声明成功,并带着一种不好的感觉走了一条路,那就是必须有更好的方法

下面是我们最近使用“git”实现这一目标的“日志”:

Repo Alpha=内部git实验室 Repo Beta=外部github项目

~ $ mkdir work
~ $ cd work
~ $ # create the clone of Beta
~ $ git clone https://github.com/foo/xot.git
~ $ # create the clone of Alpha
~ $ git clone git@internal.foo.com:xot/XOT.git
~ $ ls
xot/       XOT/
~ $ # go work in the clone of Beta
~ $ cd xot
~/xot $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
~/xot $ git remote add Internal ../XOT
~/xot $ git remote -v
Internal    ../XOT (fetch)
Internal    ../XOT (push)
origin    https://github.com/foo/xot.git (fetch)
origin    https://github.com/foo/xot.git (push)
~/xot $ git pull Internal master

<boom>
1000's of conflicts
我看到了对“git pull-s thethers”的引用()作为一种可能的自动合并策略。除了git错误指出他们的策略无效(我在Ubuntu 14.04上运行git 2.14.2)


我们错过了什么?有没有合适/更好的方法可以做到这一点?

您需要做的是创建回购Alpha。那么,任何想要做出改变的人都需要进行回购。当他们想要合并他们的变更时,他们只需要从他们的fork(beta-repo)向alpha做一个pull请求


您需要做的是创建回购Alpha。那么,任何想要做出改变的人都需要进行回购。当他们想要合并他们的变更时,他们只需要从他们的fork(beta-repo)向alpha做一个pull请求



Alpha已存在。我们每天都使用它,分支、提交、合并等等。我们对它很满意,而且它工作得很好。问题是“我们如何将当前状态推进到第二次回购(测试版),而不发生上述冲突?”但我觉得我误解了你的评论。你是说我们需要fork“beta”和pull请求吗?你需要fork alpha,它的作用是创建连接到该个人github帐户的原始回购的克隆。然后,他们可以建立自己的分支机构等,当他们对主回购有贡献时,你可以做一个拉请求。将其回购协议中的分支机构合并到原始回购协议中的您的分支机构@ToddAlpha是gitlab回购协议,beta是github回购协议。我理解分叉的概念,但看不出它如何帮助我推动我们在Alpha到Beta版本中所做的更改。我将用图表更新这个问题。这是我的错误,我误读了原始回购是gitlab回购。Alpha已经存在。我们每天都使用它,分支、提交、合并等等。我们对它很满意,而且它工作得很好。问题是“我们如何将当前状态推进到第二次回购(测试版),而不发生上述冲突?”但我觉得我误解了你的评论。你是说我们需要fork“beta”和pull请求吗?你需要fork alpha,它的作用是创建连接到该个人github帐户的原始回购的克隆。然后,他们可以建立自己的分支机构等,当他们对主回购有贡献时,你可以做一个拉请求。将其回购协议中的分支机构合并到原始回购协议中的您的分支机构@ToddAlpha是gitlab回购协议,beta是github回购协议。我理解分叉的概念,但看不出它如何帮助我推动我们在Alpha到Beta版本中所做的更改。我将用图表更新这个问题。这是我的错误,我误读了原始回购是gitlab回购。如果是同一个项目,您只需更改
源代码
执行
git远程设置url源代码https://github.com/foo/xot.git
。这是处理同一项目的不同存储库并保留历史记录的正确方法,但您必须处理冲突。是的,但这不是一次性事件。每当我们希望推动github回购协议的另一次“发行”时,处理100或1000个冲突是不可取的。我想我们必须回到删除Beta版中的所有文件,从Alpha版复制文件并进行提交。我只是希望有一个更好的方法来利用git的能力。如果我是你,你需要删除所有文件并复制所有文件,也许只需将其写入一个脚本,从repo a中检出代码,删除repo b中的所有文件,然后复制repo a中的所有文件,然后为你提交给git即可。这样,您在更改时不需要进行任何手动操作,这将成为一项简单的小任务。如果两个存储库之间存在分歧,那么两个存储库上都有开发人员,我理解冲突,没有什么神奇之处,您必须解决它们。但是,如果存储库只是用于发布,例如:如果是用于客户端,我可以猜测,您可能不想显示git存储库的历史记录。但在某一点上,不需要进行合并,您可以强制只提交代码。但我不知道你的工作流程和背景。杰里,你是对的,如果我们两个回购协议都有开发商,我们就必须处理冲突,但目前我们没有。因此,问题仍然存在,为什么会有冲突,我们如何自动选择Repo A中的代码来覆盖Repo B中的代码。为了澄清我们的工作流程,我们专门在Repo A中开发。在某个时刻,我们希望在Repo B中向全世界共享该代码。谢谢。如果它是同一个项目,您只需更改
origin
do
git remote set url origin即可https://github.com/foo/xot.git
。这是处理同一项目的不同存储库并保留历史记录的正确方法,但您必须处理冲突。是的,但这不是一次性事件。每当我们希望推动github回购协议的另一次“发行”时,处理100或1000个冲突是不可取的。我想我们会的
               commits
Repo Alpha     a12f -----> c676 -----> .... ----> d4a2

now we want to apply all the commits to repo Beta:

Repo Beta      a12f ----------------------------> d4a2