在这里,我再次使用我一周的回购,并担心我的开发计算机将落入游泳池。现在我想将我的本地仓库发送到我拿着我的裸存储库的主机,我必须这样做,再次,以下内容:
git clone --bare my-repo my-repo.git
ssh git@myserver "mkdir /opt/git/placeholder-dir"
scp -r my-repo.git git@myserver:/opt/git/praceholder-dir
cd my-repo
git add remote origin myserver-blah-blah
是不是有更好的(更短,更容易,更不容易出错)的方法呢?
答案 0 :(得分:3)
您正在做一些不必要的工作。我会跑:
ssh git@myserver git init --bare /opt/git/placeholder-dir
然后,从my-repo
目录中:
git add remote origin git@myserver:placeholder-dir
git push origin master
这似乎更容易。
<强>更新强>
如果您是仅人推送到您的远程服务器,您可以将以下内容添加到名为gitwrapper
的脚本中:
#!/bin/bash
[ "$SSH_ORIGINAL_COMMAND" ] || exit 1
eval set -- $SSH_ORIGINAL_COMMAND
# if this script is triggered by a push operation
if [ "$1" = "git-receive-pack" ] ; then
if [[ "$2" == */* ]]; then
echo "*** Repository names must not contain '/'" >&2
exit 1
fi
if [[ "$2" == .* ]]; then
echo "*** Repository names must not start with '.'" >&2
exit 1
fi
if [[ "$2" != *.git ]]; then
echo "*** Repository names must end with '.git'" >&2
exit 1
fi
if ! [ -d "$2" ]; then
echo "Creating repository $2" >&2
git init --bare "$2" >&2
fi
fi
exec "$@"
然后在ssh_config
文件中,指定command=
选项:
command="/home/git/bin/gitwrapper" ssh-rsa AAAA...
(用{的实际路径替换/home/git/bin/gitwrapper
gitwrapper
脚本)。
如果有脚本,此脚本将自动创建目标存储库 不存在。所以我可以这样做:
$ git push git@localhost:myrepo.git
见:
Creating repository myrepo.git
Initialized empty Git repository in /home/git/myrepo.git/
Counting objects: 301, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (290/290), done.
Writing objects: 100% (301/301), 159.68 KiB | 0 bytes/s, done.
Total 301 (delta 156), reused 0 (delta 0)
To git@localhost:myrepo.git
* [new branch] master -> master
特别注意该输出的前两行。当然, 拼写错误是一个问题:
$ git push git@localhost:mtrepo.git
糟糕。
希望不言而喻,但如果除了你以外的任何人 推送到你的远程服务器这个脚本会很糟糕, 可怕的主意。它没有做任何路径检查,所以它会愉快 在目标用户具有写访问权限的任何位置创建存储库。它 甚至可以允许任意命令执行。
答案 1 :(得分:3)
您可以创建一个用于备份的远程仓库并将所有分支和标记推送到它:
ssh git@myserver "git init --bare /opt/git/placeholder-dir"
git add remote backup myserver-blah-blah
当您需要备份本地仓库时
git push backup --all
git push backup --tags
您发送的更改不会被推送到备份