Git push和分布式工作流

4
艾丽斯和鲍勃正在尝试共同完成一个项目。以下是我们目前所做的事情。
鲍勃:
mkdir myproject
cd myproject
echo "Hello" > readme.txt
git init
git add readme.txt
git commit -m "Initial Commit"

Alice:
爱丽丝:
git init
git remote add bob ssh://bob/home/bob/projects/myproject
git pull bob
git checkout remote/bob/master -b bobsMaster
echo "Hello again" >> readme.txt
git add readme.txt
git commit -m "Improving readme"
git push bob bobsMaster

现在我们陷入了困境。推送成功了,但我不知道Alice的提交去了哪里。当Bob从他的master分支输入git log时,找不到Alice的提交记录。
我们的分布式工作流程是否完全错误?Alice和Bob应该如何在同一分支上合作?请注意,我们没有集中位置来托管我们的存储库,因此我们希望完全分布式工作。
编辑:按照建议,我们将采用仅拉取的工作流程。我们之前没有注意到Bob存储库中的bobsMaster分支,因为我们假设它是从早期的拉取中出现的。感谢您的回答!
4个回答

2

应该创建一个名为bobsMaster的分支。如果你想将bobsMaster推送到Bob的master分支,请使用以下命令:

git push bob bobsMaster:master

在你的工作流中,最好让Bob和Alice从对方的存储库拉取代码,因为向非裸存储库推送代码并不推荐。


1

你将更改推送到了 bobsMaster 而不是 master。因此,Bob 必须合并。

git checkout master
git merge bobsMaster

Bob没有一个名为bobsMaster的分支。你是在建议Bob将Alice添加为远程并从remote/alice/bobsMaster合并吗?如果是这样,那么这是否意味着Alice的推送是不必要的? - Alex Spurling
不,Alice将bobsMaster推送到了Bob的存储库中,因此之后它就存在那里了。请参见CharlesBs的答案。他推送了bobsMaster:master,这意味着他将本地的bobsMaster推送到了远程的master。如果省略远程分支名称,git会假定bobsMaster => bobsMaster:bobsMaster - KingCrunch

1
关于“缺失提交”:
git log --branches

这应该足够让您看到Alice的提交记录(因为她是在不同的分支'bobsMaster'上进行提交,而不是您的'master'分支)


1

提交已推送到名为bobsMaster的新远程分支,在bob存储库中(该分支是通过git push bob bobsMaster创建的)。

该命令中的最后一个参数指定了远程refspec - 如果在远程端找不到它,则会被创建。 bob存储库只有一个分支(master),因此通过将其推送到bobsMaster,您在Bob的存储库中创建了该分支。

您应该使用git push bob master将更改推送到Bob的主分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接