2013-07-31 80 views
0

讓我說我在路上與朋友,我們離開了光禿禿的git存儲庫。 我有一個工作副本(與.git文件夾),我的朋友想幫我,所以他從我的工作副本克隆我的git存儲庫,並自行工作,當然這兩個副本都結帳,所以基本上我不能提交,他直到我們中的一個人成爲一個分支後才能推動。有一個更好的方法嗎?有沒有辦法讓我們的本地主結帳?我想我總是可以在本地創建一個純粹的git,我們都可以指出它,但這看起來有點過分殺人。 目標是讓他輕鬆地將他的變化合併到我的,然後當我在線時,我將承諾所有這些。Git的道路上 - 推錯誤'[遠程拒絕]主人 - >主人(分支目前檢出)'

+0

可能相關或重複:[Git push error'\ [remote rejected \] master - > master(branch is currently checked out)'](http://stackoverflow.com/questions/2816369/git-push-error -remote-拒絕-主 - 主分支-IS-目前進行確認)。 – 2013-07-31 04:44:29

+0

你們兩個都不可能提交給你自己的本地克隆嗎?你的意思是你們都不可以互相推***?在Git中提交和推送是兩個完全不同的東西。細節很重要!另外,你的朋友「克隆你的工作副本」是什麼意思?您無法從工作副本中克隆Git倉庫,因爲它們不包含歷史記錄,您只能從其他倉庫克隆。請澄清你的問題。 – 2013-07-31 04:47:23

+0

感謝Cupcake,我的朋友的工作副本是由我的git倉庫工作副本製作的。所以我不能提交,他可以提交,但他不能推入我的工作副本倉庫(對他來說是遠程),因爲兩者都是結帳,所以我們可以按照創建分支指定的方式工作,但這似乎有點過分。有沒有辦法讓我的本地工作副本結帳?另一方面,我們嘗試了哪些方法可行,但也有點矯枉過正的是在我的筆記本電腦上創建一個裸存儲庫,然後他和我從那裏創建一個git克隆......但這有些過分。 – wily

回答

2

這個問題中缺少一些細節,但我會盡力回答。首先,如果你們都有自己的回購副本,那麼你們都應該能夠對自己的本地副本進行更改。

如果您的朋友試圖將他的更改推送到您當地的回購站,它聽起來像不起作用,因爲您目前有master已簽出,這將作爲安全功能是有意義的......您不希望擁有Git在沒有任何警告的情況下,悄悄地將您的工作副本從鼻子下面取出。您可以允許的Git通過檢查提交它直接對移動你的master分支/參考/標籤/指針:

$ git checkout head 

然後你的朋友可能會是能夠改變自己推到你的回購協議。他做了之後,一定要在你的本地回購再次檢出master分支(如果你想上班就可以了):

$ git checkout master 

然而,人們通常不會更改推到其他人的個人/私人回購協議。他們通常發送對方的請求,而不是對方的變更。所以,你可以添加你的朋友的遠程和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 
+0

確切地說,有沒有辦法讓我的本地主人沒有結帳?所以我的朋友可以推,然後我會做拉和承諾....謝謝我會嘗試所有的解決方案,你看看什麼是最簡單的工作解決方案 - 再次感謝。 – wily

+0

謝謝蛋糕與您提出的2解決方案一致。 – wily

+0

思考更多關於它我可能會去創建一個裸倉庫(塞巴斯蒂安解決方案),以防其他人加起來......以爲我總是可以添加一個額外的遠程朋友倉庫,如果我想......哇混帳真的是多才多藝.. 。(仍在學習,對不起,如果我的問題並不總是非常清楚) – wily

1

只是不要使用推。相互添加爲遠程,並使用git fetch/merge,cherry-pick,rebase或任何您認爲合適的方法來引入其他貢獻。

+0

很好用 - 謝謝! – wily

1

@蛋糕的答案是好的,但沒有什麼矯枉過正有關設置你的機器上的裸回購充當中央遠程倉庫兩個你和你的朋友。這實際上是一個非常簡單並且使生活更輕鬆,一旦其設置:

準備新的純倉庫

mkdir newrepo 
cd newrepo 
git init --bare 

返回到您現有的回購:

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

你的朋友做了同樣的使用ssh://...,但你已經想出了那部分。

簡單!

+0

謝謝塞巴斯蒂安,是的,一個新的迴歸肯定會奏效;並讓我說我在線1小時,所以我想承諾一切,最好的辦法是什麼?像我從newrepo提取所有內容,然後將我的遠程回購更改爲官方在線回購,推送所有內容,然後將newrepo設置爲遠程回收,這樣我們就可以在沒有官方在線回購的情況下繼續工作?謝謝 – wily

+0

偉大工程 - 感謝塞巴斯蒂安 – wily

+0

嗨,最好的方法是簡單地添加在線存儲庫作爲您的本地第二個遠程:'git遠程添加聯機回購別名url-of-online-repo'。然後只是'git push online-repo-alias branchname' –

相關問題