0

假设我和朋友在路上,我们从裸 git 存储库离线。我有一个工作副本(带有 .git 文件夹),我的朋友想帮助我,所以他从我的工作副本中克隆了我的 git 存储库并自行工作,当然两个副本都是结帐所以基本上我不能提交,他可以在我们中的一个人建立分支之前不要推动。有一个更好的方法吗?有没有办法不让我们的本地主结帐?我想我总是可以在本地创建一个裸 git,我们都可以指向它,但这似乎有点过分杀戮。目标是让他轻松地将他的更改合并到我的更改中,然后当我在线时,我将提交所有这些。

4

3 回答 3

2

问题中缺少一些细节,但无论如何我都会尝试回答。首先,如果你们都有自己的 repo 副本,那么你们都应该能够将更改提交到自己的本地副本。

如果您的朋友正试图将他的更改推送到您的本地存储库,听起来它不起作用,因为您当前已经master签出,这作为一项安全功能是有意义的......您不希望 Git 默默地换掉您的工作副本就在你的眼皮底下,没有任何警告。master您可以通过直接检查它所在的提交来允许 Git 移动您的分支/引用/标签/指针:

$ git checkout head

然后您的朋友可能能够将他的更改推送到您的存储库。完成后,请务必master在您的本地仓库中再次签出分支(如果您想处理它):

$ git checkout master

但是,人们通常不会将更改推送到其他人的个人/私人仓库。他们通常会互相发送拉取请求,以及fetch彼此的更改。因此,您可以添加您朋友的遥控器和fetch他的更改,然后将merge它们添加(或pull两者都执行):

$ git add <friend name> <url or path to friend remote>

$ git fetch <friend remote>
$ git merge <friend>/master

# Or combine fetch and merge using pull
$ git pull <friend> master

master或者,您可以在他的更改之上重新设置本地更改,而不是获取并合并(或拉取)您朋友的更改到您的本地分支:

$ git fetch <friend remote>
$ git rebase <friend>/master master
于 2013-07-31T04:39:45.777 回答
1

@cupcake 的回答很好,但是在你的机器上设置一个裸仓库并没有什么大不了的,它充当你和你朋友的中央远程存储库。它实际上要简单得多,并且一旦设置好就可以让生活更轻松:

准备新的裸存储库

mkdir newrepo
cd newrepo
git init --bare

回到你现有的仓库:

git remote add new_repo_alias /path/to/newrepo
git push new_repo_alias something

您的朋友使用 也是如此ssh://...,但您已经弄清楚了那部分。

简单的!

于 2013-07-31T06:56:15.390 回答
1

只是不要使用推送。将彼此添加为远程并使用 git fetch/merge、cherry-pick、rebase 或任何您认为合适的方式来吸引彼此的贡献。

于 2013-07-31T04:38:27.837 回答