2013-06-01 47 views
4

我有兩個git身份,一個是個人身份,另一個是我的僱主。當多個git帳戶配置時更新子模塊

我的工作項目使用子模塊,雖然我可以克隆主回購罰款,但我無法更新子模塊。我需要配置什麼,這樣子模塊也可以在本地更新而不會出現以下錯誤?

Fetching origin 
From github.com:/work_domain/work_submodule 
* branch   HEAD  -> FETCH_HEAD 
error: pathspec 'master' did not match any file(s) known to git. 

我有2套id_rsa鑰匙在我的〜/ .ssh目錄:

id_rsa.pub <= personal ssh key 
id_rsa_work.pub <= work ssh key 

的〜/ .ssh/config文件:

#work acccount 
Host github-work 
    HostName github.com 
    User git (corrected with info from answers) 
    IdentityFile ~/.ssh/ida_rsa_work 

#personal account 
Host github-personal 
    HostName github.com 
    User git 
    Identity ~/.ssh/ida_rsa 

當我最初克隆我的工作回購成功,我用調整後的主機映射:

git clone [email protected]:work_domain/repo_name.git 

什麼,而不是我通常在工作時使用:

git clone [email protected]:work_domain/repo_name.git 

在工作項目回購,當然.gitmodules文件有官方測繪:

[submodule "work_submodule"] 
     path = work_submodule 
     url = [email protected]:/work_domain/work_submodule.git 

每下面的建議,我更新了。 gitmodules屬性爲:

[submodule "work_submodule"] 
     path = work_submodule 
     url = [email protected]:/work_domain/work_submodule.git 

但仍然無法在本地更新子模塊。

+0

github上ssh訪問將被替換爲一個始終以「混帳」發生,因爲用戶名 - 在你的ssh配置文件「工作的用戶名」因此是錯誤的 –

+0

您可以在.git/config中更改子模塊的實際遠程位置。這不會被推或任何東西,但隻影響您當地的回購。 – Chronial

+0

更新的問題與建議和最新的錯誤 –

回答

2

爲了防止意外提交您的私人網址爲子模塊的庫(這取決於你的.ssh/config)的可能性,就應該在.git/ssh


編輯URL編輯.gitmodules文件中的URL使用github-work是這樣做的一種方式。但是,由於這是項目的文件部分,因此可能會犯下錯誤。

而不是@Chronical在評論中提到。只更改本地設置爲您的特定結賬,則應該更改URL中.git/config

url = github-work:/work_domain/work_submodule.git 

通過改變它那裏,而不是在.gitmodules你可以擺脫額外的步驟清理的東西,不小心使用了不正確的URL

請注意,如果你這樣做git submodule sync.git/config編輯URL中.gitmodules

0

首先,如果你有一個的〜/ .ssh/config中,它是能夠使用不同的公共/私有密鑰,這意味着你的SSH網址應該說使用的配置文件:

url = github-work:/work_domain/work_submodule.git 
# or 
url = github-personal:/work_domain/work_submodule.git 

全點配置文件是使用不同的密鑰,不是不得不提到用戶,端口號,服務器名稱等等。
'github-work'和'github-personal'是該配置文件中的輸入鍵,它們不是服務器名稱。

其次,在.gitmodules文件修改URL後,不要忘記做:

  • 徹底刪除你的子模塊的內容,如果它已經從以前的地址下載:
 
rm -Rf work_domain/work_submodule ; git checkout -- work_domain/work_submodule 
  • 再次更新該子模塊:
 
git submodule sync 
git submodule update work_submodule 
+0

謝謝!這是我從以前的更新嘗試殘餘。清理所有的文件都有訣竅。 –