如何让我的远程存储库拥有多个镜像存储库的信息?
我创建了一个本地存储库并添加了origin和server1
# git remote add origin https://github.com/user/repo.git
# git remote add server1 git@git.ttu.edu:bharath/repo.git
现在,我将存储库推送到源并在另一台计算机上克隆它。克隆的存储库不知道server1
。有没有办法可以在克隆的存储库中提供server1
信息?我该怎么做?
答案 0 :(得分:3)
不幸的是,没有。 Git不会通过网络传输配置,因为它可能会引入安全问题。
我认为解决此问题的最佳方法是创建一个脚本,添加您想要的额外配置,并且您必须记住执行它。记录在设置过程中运行它的必要性,以便于记忆。
抱歉!
<强>更新强>
不幸的是,Git也不会传输钩子脚本。同样,这是一项安全预防措施。您可能正在克隆一个您不信任的代码库,而Git执行任意代码将是错误的。
我意识到这不是你想听到的,但它是世界的现状。你可以做的事情,我做的很好,就是创建一个可以帮助你完成这个过程的别名:
[alias]
setup = !sh -c 'git remote add origin https://github.com/user/$1.git; git remote add server1 git@git.ttu.edu:bharath/$1.git' -
然后git setup REPO_NAME
会为你设置两个遥控器。
如果您热衷于为您执行脚本,则可以设置post-checkout
挂钩,检查存储库中已知位置的脚本并执行它,如果脚本尚未执行已经。可以经常调用post-checkout
,因此您可能不希望它始终完全执行。然后,您可以在post-checkout
中为/usr/share/git-core/templates/hooks
设置自定义模板。
例如,您可以将/usr/share/git-core/templates/hooks/post-checkout
设置为:
#!/bin/sh
test -f "$GIT_DIR/.ran-setup" && exit 0
# Call the setup script in the repo.
git show master:setup.sh > "$GIT_DIR/.setup-script" || {
# No setup.sh exists at the top of the repo, so there's nothing to execute.
exit 0
}
chmod +x "$GIT_DIR/.setup-script"
"$GIT_DIR/.setup-script" || {
echo 1>&2 "error: setup script failed to execute correctly."
# Clean up.
rm -f "$GIT_DIR/.setup-script"
# Note: this doesn't prevent anything from happening in Git. Git doesn't
# care about the exit value of the post-checkout script.
exit 1
}
# Clean up.
rm -f "$GIT_DIR/.setup-script"
touch "$GIT_DIR/.ran-setup"
这将检查主分支顶层的setup.sh
,并在第一次看到它时尝试执行它。然后在setup.sh
脚本中,您可以执行以下操作:
#!/bin/sh
# Attempt to get the repository name from the origin.
repo_name=$(git config remote.origin.url |
sed -e 's|.*/\([^/]*\)$|\1|' |
sed -e 's|\.git$||')
# Add the remote as long as there's a repo name.
if [ "$repo_name" != '' ]; then
git remote add server1 "git@git.ttu.edu:bharath/${repo_name}.git"
fi
您可以将模板放在备用位置,如果您无法修改系统范围或不想修改系统(因为系统与可能不需要此功能的其他用户共享,例如)。您可以使用--template
git clone
选项指向备用位置,也可以在~/.gitconfig
中设置以下内容:
[init]
templatedir=/path/to/new/template/dir
任何这样的方法的缺点是一个人可以让你执行任意代码。因此,“朋友”可能会说服您克隆最终会擦除硬盘驱动器的存储库,或更糟糕的事情。而且,这就是为什么Git本身不支持这个概念。