15

我和来自一个大团队的其他几个人正在该项目的单独页面上工作。我们称它为群组页面。当我们在组页面上工作时,我们需要交换不完整的代码,我们不希望将这些代码发送到中央仓库。在此期间,我们还致力于与群组页面无关的功能,我们确实需要提交并推送到中央服务器。我正在寻找这个问题的解决方案,这是我的想法。请对他们发表评论。

由于更高层,我们无法在实际的回购服务器中建立分支。

  1. 创建并通过电子邮件发送差异,然后丢失更改并在我们需要返回组页面时使用差异。收到电子邮件的人应用差异。等等
  2. 我们对代码进行更改,提交它,但不要推送它。然后,任何需要不完整代码的人都可以直接从我们这里获取。
  3. 使用 --bare 标志制作另一个中央服务器的克隆。因此,我们可以将其视为仅用于组页面的本地中央服务器。我们可以从中提取并为组页面创建一个单独的工作区。我们可以推动和拉动它。

现在这些都有问题。

  1. 太乏味了。我想用 git 来做。
  2. 当有人从我这里拉取,然后开发一个新功能,然后他推送(到中央服务器),那么他从我那里拉取的任何东西都不会被推送到服务器。当我们的群组页面代码完成时,他最终将如何将其推送到服务器。
  3. 一样的问题。有没有办法从这个本地中央服务器推送到主服务器?当然,两者都是裸回购。有没有办法从一个裸克隆推送到主 github 存储库?
4

3 回答 3

8

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 pullgit pushgroups以及 一起使用origin

于 2012-11-14T05:56:12.027 回答
5

有没有办法从一个裸克隆推送到主 github 存储库?

是的,您不必在工作树中从裸仓库推送更改。

只需 ssh 到您“本地主人”所在的位置,然后运行:

git push origin master

正如另一个答案指出的那样,您也可以直接从本地副本推送到远程主服务器,但有时更方便的是拥有这样的自动“看门人”存储库,可以触发将更改推送出去(例如,在审查之后)通过自动化到多个远程存储库,而不必担心为特定个人设置 ssh 密钥等来推出更改。

于 2015-12-16T08:55:32.090 回答
2

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

因此,无论您采用哪种方式,如果您的同事从您那里撤出,他们可以将您的提交推送到主仓库。同样的事情也适用于选项 3,使用你的团队 git 服务器,当准备好时,你们中的一些人拉到他的机器并从那里推送到主服务器。

因此,在您的情况下,选项 3 将是最简单的。虽然,一旦你推送到主仓库,这个仓库将提供你在私人服务器中完成的所有工作。所以,我什至不确定拥有自己的服务器对您是否真的有用(除非您想确保没有其他人接触您的“私人”分支)。

于 2012-11-14T05:58:48.213 回答