我是git的新手,所以如果我在这里滥用术语,我会道歉(请纠正我),但我会尽我所能.
我正在尝试在Web服务器上设置一个裸git repo(hub)和一个开发站点工作副本(prime).我试过在这篇文章之后模仿它.我希望每当推送集线器repo时都要更新开发工作副本.我的印象是,正确的钩子是这样的post-update,我已经创建了这样:
#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET
Run Code Online (Sandbox Code Playgroud)
当我将更改从本地存储库推送到裸集中心时,我从更新后的脚本中获得以下输出:
remote: sites
remote: fatal: Not a git repository: '.'
Run Code Online (Sandbox Code Playgroud)
但是,如果我以用户"站点"的身份SSH进入服务器并手动执行此脚本,那么这个钩子或脚本可能会出现什么问题?
我正在colo工具中的私有服务器上运行我自己的私有git存储库.我将它用于任何我无法开源的私人项目.我使用github进行所有开源工作.
我在桌面ubuntu机器和MacBookPro上进行开发.当我在开发系统上进行更改时,我将更改推送到colo中的原点并拉到另一个系统.我非常擅长将所有三个系统保持最新状态,主要用于备份和灾难恢复.
现在BitBucket正在免费提供私人git托管,我正在考虑在那里添加我的项目的克隆.此外,我可以使用BitBucket提供的额外功能,我的准系统私人git服务器不提供.但是,我想继续在我的colo服务器上保留私人存储库的副本以及备份冗余.
所以我有几个问题:
在不改变我的标准开发过程(编辑,添加,提交,推送)的情况下,如何自动将推送到我的服务器的提交同步到bitbucket项目?每次我推送到我的git服务器,我都希望这些提交能够自动推送到我的bitbucket项目.我不想改变我的工作流程,并希望对我的开发客户端进行必要的更改.
如果我想使用bitbucket作为我的主要git repo,如何将我的项目从私有git服务器迁移到bitbucket?
一旦我迁移到bitbucket,我仍然喜欢我的服务器上的另一个备份.如何自动提交bitbucket被推送到我的git服务器?这基本上与问题1相反.
我的本地 git 存储库位于加密卷内。我希望git pull --all只有在远程有新提交时才能运行。但是,我无法像这里一样使用 post-receive hook由于我没有加密卷的密码,因此。这意味着即使钩子会被触发,我仍然不知道安装卷和拉取新更改的密码。所以我正在寻找其他一些替代方案,我想到的一种可能方法是向遥控器询问最新版本的 SHA 并将其与本地副本知道的最新版本 SHA 进行比较,如果它们匹配,我不需要运行 pull 命令,如果它们不匹配,那么我需要运行 git pull 命令。
有没有办法可以git rev-parse master在远程存储库上运行?
您可以在此处获得有关我的问题的更多背景信息
有没有办法git pull直到有东西可以拉。
假设我正在等待一位同事推送他的最新更改,因为我不耐烦并且不看他的屏幕,我只是运行watch git pull直到我看到有东西被拉出,但我可能会错过这一刻并浪费一点比必要的时间更多。(注意:是的,这是一个非常小的不便,但仍然是不便:))
git pull似乎没有不同的返回值,无论它是否实际拉了一些东西,但也许有一些我不知道的晦涩的、未记录的选项?
编辑: 感谢您的回答,我将其添加到我的 .zshrc 中:
alias gitpullwait="git pull | grep "已经是最新的" > /dev/null; while [ $? -ne 1 ]; do git pull | grep "已经是最新的" > /dev/null;完成;通知发送拉 f$
它看起来很丑,但对我有用。
之前我使用过Mercurial(Hg),可以在本地PC上做一些事情:
hg clone ssh://peter@hostingcompany.com/~/mysite.com
Run Code Online (Sandbox Code Playgroud)
然后将有一个名为的本地文件夹mysite.com,我可以编辑其内容,提交,并说出hg push并将其推送到服务器.当然,为了让内容显示在"工作目录"中,我将不得不在ssh那里做一个hg up.
使用Git,如果我这样做,在服务器上,做一个
git init
git add .
git commit -m "ok"
Run Code Online (Sandbox Code Playgroud)
在当地的电脑上,做一个
git clone ssh://peter@hostingcompany.com/~/mysite.com
Run Code Online (Sandbox Code Playgroud)
但是当我编辑一个文件时git push ssh://peter@foo.com/~/mysite.com master,它会拒绝它,因为它不是一个"裸存储库".
有办法吗?
hg up- 是的git checkout,以便内容在mysite.com上立即可视(在任何地方使用任何Web浏览器).更新:
看起来通常的做法是推出一个简单的回购......但我们不能使用一个简单的回购并使(2)上面的工作?如果这是一种实用的方式,那么我们不必坚持"推动裸机回购"规则吗?
如果还有其他原因仍然需要在服务器上推送裸机并克隆...那么:
如果服务器有目录,例如~/mysite.com和~/other_folder等,然后在那里应该用于回购mysite.com坐? mysite.com是网站的内容,所以如果我放一个index.html,那么世界上的任何浏览器都可以看到它.那么创建一个裸仓库,~/mysite.com从它上面克隆,在本地PC上,在本地PC上git push <path> master; ssh <path> "cd to that folder and do git checkout to update the content"自动使用1行是不错的?这条线是 …