【问题标题】:git workflow with two developers两个开发人员的 git 工作流
【发布时间】:2015-02-27 08:37:52
【问题描述】:

我有一个问题:与 2 位开发人员的 git 工作流。我已经阅读了很多,但我仍然缺少一些东西。

所以我与另一位开发人员合作开发一个项目。我们每个人都有本地开发环境(vagrant),并且有一个我们都将提交推送到的阶段服务器。现在我们在舞台服务器上都有单独的存储库,所以他有他的拉/推,我有我的拉/推。

他做出更改后,我让他推送到舞台,然后我登录到舞台服务器,转到他的仓库并运行 fetch/merge 以便他获得我所做的任何更改,然后我推送他的合并提交到我的回购,以便我有他的变化。

我开始在舞台服务器上使用裸存储库,但它不允许我获取/合并裸存储库。所以我切换到非裸仓库,现在我收到一个错误,我无法从开发环境推送到阶段仓库,因为主分支已签出(这不是裸仓库的问题)。我使用舞台存储库上的“receive.denyCurrentBranch ignore”选项解决了这个问题,但我觉得我可能只是做错了什么。

谁能告诉我这个设置哪里出了问题?

【问题讨论】:

  • 澄清一下,你们每个人在同一个仓库中都有单独的存储库或单独的分支?
  • 我们每个人都有自己的 repo,所有东西都使用 master 分支。
  • 为什么不直接使用同一个仓库并处理不同的分支呢?你能发布你在尝试从开发者推送到舞台时遇到的确切错误吗?在你的情况下,我不明白为什么需要两个回购。
  • 主要是为了保护自己免受其他人的不利影响(他不是开发人员,只是一个做轻量级 CSS/HTML 的营销人员)。将 dev 推送到 stage 的错误是推送被拒绝,因为 master 分支已签出。

标签: git


【解决方案1】:

当服务器可用时,使用 Git 与极少数开发人员共享代码的最简单方法是为服务器中的每个用户创建一个裸仓库,每个用户都可以读取,但只有所有者才有写入权限(多用户写访问权不是微不足道的)。使用 ssh 为每个用户设置一个帐户非常容易(看起来您已经拥有类似的东西)。

然后,为了将代码发送给其他人,您将其发送到您自己的远程克隆。

为了从其他人那里获取代码,您可以从他们的远程克隆中获取/拉取代码(每个克隆在您的本地配置中都是不同的远程)。

服务器端没有合并。实际上,它不必是单个服务器,远程仓库也不必相互了解。

例子:

user1$ git clone ssh://server/home/user1/git/project
...
user1$ cd project
user1$ git remote add user2 ssh://server/home/user2/git/project
user1$ git fetch user2
...
user1$ git branch -a
* master
  origin/master
  user2/master
user1$ git commit -m'Commit from user1' --allow-empty
user1$ git push origin master

user2$ git clone ssh://server/home/user2/git/project
...
user2$ cd project
user2$ git remote add user1 ssh://server/home/user1/git/project
user2$ git pull user1 master
...
user2$ git log --decorate
sha1... (master, user1/master)
    Commit from user1
sha1... (origin/master)
...

【讨论】:

  • 如果我们都进行更改并推送到我们的克隆,我可以拉出他的新更改而不会丢失我自己的吗?
  • 是的,当然。在这种情况下,git pull 命令将合并两个分支,创建一个统一更改的新提交(并可能解决冲突)。如果您注意到其他开发人员在您之前推送了他的提交,我建议您在推送您的之前将您的本地提交重新设置在它们之上(git pull --rebasegit fetch 后跟 git rebase),以保持历史更连续和更容易了解。
猜你喜欢
  • 2014-03-28
  • 1970-01-01
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2011-09-23
  • 2016-09-11
  • 1970-01-01
相关资源
最近更新 更多