2012-11-14 97 views
12

我和一个来自一个大团队的其他几个人正在一个单独的项目页面上工作。我们称它为组页面。当我们在组页面上工作时,我们需要交换不完整的代码,我们不希望将代码发送到中央仓库。在此期间,我们也在处理与组页面无关的功能,我们需要提交并推送到中央服务器。我正在考虑解决这个问题,这里是我的想法。请评论他们。如何从一个裸git回购推到另一个?

我们不能在实际的回购服务器上建立一个分支,因为更高的上升。

  1. 创建并发送电子邮件差异,然后在我们需要返回组页面时丢失更改并使用差异。获取电子邮件的人应用差异。等等。
  2. 我们对我们的代码进行了更改,提交它,但不要推它。那么谁需要那些不完整的代码,就可以直接从我们这里拉。
  3. 用--bare标志制作中央服务器的另一个克隆。所以我们可以把它作为一个本地中央服务器,只是为了组页面。我们可以从中拉出并为组页面创建单独的工作区。我们可以推动并拉动它。

现在每一个都有问题。

  1. 太繁琐。我想为它使用git。
  2. 当有人从我身上拉下来,然后开始一项新功能,然后他(推送到中央服务器),然后他从我那里拉的任何东西都不会被推送到服务器。当我们的组页码完成时,他如何最终将它推送到服务器。
  3. 同样的问题。有没有一种方法可以将本地中央服务器推送到主服务器?两者当然都是裸回购。有没有办法从一个光秃秃的克隆推向主github回购?
+0

您可以在bitbucket上制作一个免费的私人git回购,将该回购添加到您的遥控器,然后在需要时提交/推送到您的github回购主人。虽然这看起来很奇怪。你为什么不在你的github repo上做分支请求? –

+0

我们只是说我不允许。如果我照你的说法行事,最终我能否将变动从那个桶的回购推到我的主人手中? –

+0

你不会直接从bitbucket推送。您可以使用该回购协议与您的团队协作。你们都会进行修改,将这些修改推送到bitbucked,把这些修改放到你的本地仓库(你的机器),然后从你的本地仓库推到你的github master。合理? –

回答

7

3是您的最佳选择。事实上,这就是Git如何使用的原因;包含各个组件的存储库,这些存储库在工作完成后会进入更加中央的存储库。

推动别人的变化没有问题。比方说,你做了一个改变,并将其推送到组页面存储库。然后我拉动它,做一些改变,然后推回去。现在我们决定我们完成了。如果我推送到中央存储库,那么推送将包括我的更改以及我的更改所基于的更改。

您不需要从一个裸回购仓库推到另一个。 Git通过从本地回购推动到一个或多个远程回购。克隆时,会有一个名为“origin”的默认远程回购站。但是,您可以根据需要配置尽可能多的远程回购站。为了设置这个,假设你已经从中央回购中克隆出来;这就是所谓的“起源”。现在您创建一个裸回购:它在ssh://some-machine.corp.com/path/to/groups-repo.git。在您当地的工作回购中,只需执行git remote add groups ssh://some-machine.corp.com/path/to/groups-repo.git,并且您将参考该组回购。现在您可以使用git fetch,git pull,git push等等与groups以及origin

+0

让我再说一遍,只是为了确保我能理解你。 有一个大师(github),我们都在从中拉出并推向。我们继续使用这个来进行'平常'编码。 在另一台机器上,我们做了一个纯粹的主人克隆,我们称它为组。然后在我们的机器上,我们从这台机器克隆到不同的工作空间。所以现在我们有两个不同的。对于所有与团体页面相关的编码,我们推动并从团体机器拉到我们团体的工作空间。当我们的工作完成时,一个人从组机器中拉出来,并按照刚刚提到的过程将它推送到github。 –

+0

@咖啡因几乎得到它。一个窍门是你不需要克隆到不同的工作区。您可以在单个工作区中创建多个遥控器;您可以使用跟踪“groups/master”的本地分支,以及跟踪“origin/master”的另一个分支,并在每次使用'git checkout'时在它们之间切换。如果你愿意,你可以使用多个工作空间,但有时候有一个工作空间有多个遥控器真的很方便。是的,当你完成开发时,从组织机器中取出最新代码的人可以将其推到主回购站。 –

+0

我永远不需要合并这些分支,对吧?作为群组分支,在对github remote进行最终更改后,我可以删除这个分支。当我将拉动我的机器上的主分支时,组更改将被添加到它,因为它们被推送到github? –

1

为了简单起见,Git是一个分布式版本控制系统。这意味着,无论何时从回购中克隆,您都可以克隆整个存储库中的。每个克隆都是完全独立的。实际上,你在机器上克隆的内容与服务器上的内容完全一样,你的克隆可以接收推/拉等。(唯一的区别可能是你不会让任何人通过ssh连接

所以,无论你走多远,如果你的同事从你身上拉下来,他们可以将你的承诺推到主回购。同样的事情将适用于选项3,使用你的团队git服务器,并准备好时,你们中的一些人拉到他的机器,并从那里推到主服务器。

因此,在你的情况下,选项3将是最简单的。尽管一旦你推到主仓库,这个仓库将会给你在私人服务器上所做的所有工作。所以,我甚至不确定它有你自己的服务器是非常有用的(除非你想确保没有人接触你的“私人”分支)。

2

有没有办法从一个光秃秃的克隆推到主github回购?

是的,您不必在工作树中推动裸露回购变更。

简单的ssh到你的本地主'是,和运行的地方:

git push origin master 

至于对方的回答指出,你也可以直接从您的本地副本推到远程主,但它的有时候更方便的拥有一个像这样的自动化的“看门人”存储库,可以通过自动化触发将更改(例如,审阅后)推送到多个远程存储库,而无需担心为特定个人设置ssh密钥等等变化了。

+0

您能否帮助评论如何从远程主人拉到当地主人? 'git pull origin master'抱怨“此操作必须在工作树中运行” – SOUser

相关问题