我正在寻找的是我的代码是通过推送从左到右行进的:
local machine -> bare remote repository -> full remote repository
注意:裸仓库与完整仓库在同一台机器上。完整的回购也是我在共享主机上的实时网站。
在完成所有要求之后,我发现我的完整存储库中的服务器上绝对没有创建文件。 git甚至会这样做吗?我是git的新手,所以也许我搞砸了。我所做的一切都列在下面。
以下是我在本地计算机上使用现有代码进行的操作:
$ git init
$ git add .
$ git commit -m "Initial commit"
在远程计算机上,这是我为裸仓库做的事情:
$ mkdir -p $HOME/www/example.git
$ cd $HOME/www/example.git
$ git --bare init
回到本地机器,我这样做了:
$ git push exampleserver master
$ git remote add exampleserver ssh://exampleuser@example.com/~/www/example.git
$ git push exampleserver master
回到远程机器,设置完整的repo / live网站,我这样做了:
$ mkdir -p $HOME/www/example.com
$ cd example.com
$ git init
$ git remote add bare $HOME/www/example.git
$ cd $HOME/www/example.git/hooks/
在裸仓库的hooks目录中,我创建了一个名为'post-update'的可执行shell脚本,它看起来像这样:
#!/bin/sh
cd $HOME/www/example.com
unset GIT_DIR
git pull bare master
exec git-update-server-info
最后,当我在本地机器上完成编码时,我会执行以下操作:
$ git push exampleserver master
这会返回'一切都是最新的'。
答案 0 :(得分:1)
如果推送回声“一切都是最新的”,那么你的钩子就不会被调用,因为没有任何更新。正如@ysdx指出的那样,标准输出被转发,您可以使用echo输出其他信息。
因此推动实际变化将是这样的:
Counting objects: 5, done.
Writing objects: 100% (3/3), 244 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
remote: /git/server /git/remote
remote: From ../remote
remote: * branch master -> FETCH_HEAD
remote: Updating e10977b..21d83ca
remote: Fast-forward
remote: test.txt | 2 +-
remote: 1 files changed, 1 insertions(+), 1 deletions(-)
remote: /git/remote
To ../remote
e10977b..21d83ca master -> master
你可以看到来自钩子的拉力输出。事实上,所有以'remote:'开头的行都是从钩子转发的。如果没有调用你的钩子,你会得到这样的输出:
Counting objects: 5, done.
Writing objects: 100% (3/3), 243 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To ../remote
21d83ca..aac857c master -> master
除此之外,可能值得使用pushd / popd进行目录更改。我基本上使用了与你相同的脚本来生成上面的输出:
pushd ../server
unset GIT_DIR
git pull remote master
popd
exec git update-server-info