Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 - Fatal编程技术网

两个开发人员的git工作流

两个开发人员的git工作流,git,Git,我有一个问题:git与2名开发人员的工作流程。我读了不少书,但还是遗漏了一些东西 因此,我与另一个开发人员合作进行一个项目。我们每个人都有本地开发环境(vagrant),并且都有一个阶段服务器,在那里我们都在推动提交。现在我们在舞台服务器上都有单独的回购协议,所以他有他的,他拉/推,我有我的,我拉/推 在他做出更改后,我让他推到stage,然后我登录到stage服务器,转到他的repo并运行fetch/merge,这样他就可以得到我所做的任何更改,然后我将他的合并提交推到我的repo,这样我就可

我有一个问题:git与2名开发人员的工作流程。我读了不少书,但还是遗漏了一些东西

因此,我与另一个开发人员合作进行一个项目。我们每个人都有本地开发环境(vagrant),并且都有一个阶段服务器,在那里我们都在推动提交。现在我们在舞台服务器上都有单独的回购协议,所以他有他的,他拉/推,我有我的,我拉/推

在他做出更改后,我让他推到stage,然后我登录到stage服务器,转到他的repo并运行fetch/merge,这样他就可以得到我所做的任何更改,然后我将他的合并提交推到我的repo,这样我就可以得到他的更改

我开始在后台服务器上使用裸repo,但它不允许我获取/合并裸repo。所以我切换到了非裸repo,现在我得到了一个错误,我不能从dev环境推送到stage repo,因为主分支已签出(裸repo没有问题)。我在舞台回购协议中使用了“receive.denyCurrentBranch ignore”选项解决了这个问题,但我觉得可能我只是做错了什么


有人能告诉我这个设置哪里出了问题吗

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

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

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

服务器端没有合并。实际上,它不必是一台服务器,远程repo也不必相互了解

例如:

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)
...

只是要澄清一下,在同一回购协议中,你们每个人都有单独的存储库或单独的分支机构?我们每个人都有自己的回购协议,使用主分支机构进行所有操作。为什么不使用相同的回购协议,并使用单独的分支机构呢?当你试图从开发人员推到舞台上时,你能发布你得到的确切错误吗?在你的情况下,我不明白为什么需要两次回购。主要是为了保护自己免受另一个人的恶意推送(他不是开发人员,只是一个做简单CSS/HTML的营销人员)。将dev推送到stage的错误是推送被拒绝,因为主分支已签出。如果我们都进行了更改并推送到克隆,我可以在不丢失自己的更改的情况下推送他的新更改吗?当然可以。在这种情况下,
git pull
命令将合并两个分支,创建一个新的提交来统一更改(并可能解决冲突)。如果您注意到其他开发人员在您之前推送了他的提交,我建议您在推送您的提交之前,对本地提交重新设置基础(
git pull--rebase
git fetch
,后面紧跟着
git rebase
),以便使历史记录更有序、更容易理解。