我有两个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.
我的〜/ .ssh目录中有两组id_rsa键:
id_rsa.pub <= personal ssh key
id_rsa_work.pub <= work ssh key
〜/ .ssh / config file:
#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 git@github-work:work_domain/repo_name.git
而不是我在工作时通常使用的东西:
git clone git@github.com:work_domain/repo_name.git
在工作项目仓库中,.gitmodules文件当然有官方映射:
[submodule "work_submodule"]
path = work_submodule
url = git@github.com:/work_domain/work_submodule.git
根据以下建议,我将.gitmodules属性更新为:
[submodule "work_submodule"]
path = work_submodule
url = git@github-work:/work_domain/work_submodule.git
但仍无法在本地更新子模块。
答案 0 :(得分:2)
为了防止意外将子模块的私有URL提交到存储库(取决于您的.ssh/config
),您应该编辑{{1}中的网址}}
编辑.git/ssh
文件中的URL以使用 github-work 是一种方法。但是,由于这是项目的文件部分,因此可能会错误地提交。
而是@Chronical在评论中提到的。要仅更改特定结帐的本地设置,您应该更改.gitmodules
.git/config
通过更改它而不是url = github-work:/work_domain/work_submodule.git
,您可以摆脱额外的步骤来清理意外使用错误网址的内容
请注意,如果您执行.gitmodules
git submodule sync
中编辑的网址将被.git/config
答案 1 :(得分:0)
首先,如果你有一个〜/ .ssh / config,它就可以使用不同的公钥/私钥,这意味着你的ssh url应该使用所说的配置文件:
url = github-work:/work_domain/work_submodule.git
# or
url = github-personal:/work_domain/work_submodule.git
配置文件的所有要点是使用不同的密钥,和到而不是必须提及用户,端口号,服务器名称等。
“github-work
”和“github-personal
”是该配置文件中的输入键,它们不是服务器名称。
其次,在修改.gitmodules
文件中的网址后,请不要忘记:
rm -Rf work_domain/work_submodule ; git checkout -- work_domain/work_submodule
git submodule sync git submodule update work_submodule