我正在尝试设置Git来暂存我的网站,以便我可以git pull
让当前版本在本地工作,然后git push
将更改推送到远程服务器.我已经设置它以便按照我想要的方式工作,但是在我推动之后,我必须手动运行git checkout -f
或git reset --hard HEAD
在远程服务器上运行.
我已经尝试将这些作为服务器上的post-receive挂钩添加到shell脚本中,但它似乎没有任何效果.我知道脚本正在运行,因为我在推送后看到"更改推送到服务器".这是post-receive钩子:
#!/bin/sh
git reset --hard HEAD
echo "Changes pushed to server."
Run Code Online (Sandbox Code Playgroud) 由于"测试"是Git钩子的常用用途,我的问题很难搜索.
我正在编写一个相当复杂的git post-receive hook,想知道测试它的最佳方法是什么.目前我的流程是:
有没有更简单的方法来测试这个?理想情况下它看起来像:
也许我可以"重新发布"之前的推送,或者让远程仓库表现得像是刚刚收到特定哈希的推送?
我有一个post-receive钩子脚本坐在我正在推动的远程仓库上 git reset --hard
像这样的东西:
$ git push opal
Counting objects: 74, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (45/45), done.
Writing objects: 100% (53/53), 16.68 KiB, done.
Total 53 (delta 20), reused 0 (delta 0)
remote: warning: updating the current branch
remote: HEAD is now at 88f1e35 tweak lavalamp styles
Run Code Online (Sandbox Code Playgroud)
我在这里不明白的是 - 遥控器说头部现在在XXX但是当我登录服务器时 - 远程工作副本根本没有更新!
任何的想法?
我在远程仓库上有一个post post hook挂钩设置,试图确定传入推送的分支名称,如下所示:
$branch = `git rev-parse --abbrev-ref HEAD`
Run Code Online (Sandbox Code Playgroud)
但是,我发现,无论我从我的$ branch变量推送什么分支都设置为'master'.
有任何想法吗?
我有一个GitHub存储库,我想通过post-receive钩子通知Jenkins新的提交.我已经将GitHub插件安装到Jenkins中,并允许Jenkins管理它自己的钩子URL.该项目具有正确的git存储库URL,并被指示"在将更改推送到GitHub时构建".当我有GitHub发送测试有效负载时,我在前面的Jenkins的nginx网络服务器中找到了这个:
207.97.227.233 - - [15/Sep/2011:07:36:51 +0000] "POST /github-webhook/ HTTP/1.1" 403 561 "-" "-"
Run Code Online (Sandbox Code Playgroud)
我正在运行SSL,所以我禁用它无效.我是否需要在权限矩阵中为匿名用户提供特殊权限?
请原谅缺少配置文件:我很乐意分享可能存在的内容,但我不知道分享可能有用的内容.
我们使用带有中央仓库的git(使用Gitosis).我已经创建了一个post-receive挂钩,只要将更改推送到中央存储库,就会生成一封发送到dev邮件列表的电子邮件,并从git repo中的文档文件夹生成文档.
因此,在~git /我有一个目录,我们称之为'a',其中包含git repo的克隆.后接收挂钩看起来像:
#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log )
Run Code Online (Sandbox Code Playgroud)
电子邮件脚本正在运行,但文档生成却没有.pull_log.log的内容是:
fatal: Not a git repository: '.'
Run Code Online (Sandbox Code Playgroud)
这让我觉得它没有改变到上面脚本第5行的正确目录.我错了吗?我怎样才能让它发挥作用?
编辑:我已按照回复中的建议更新了post-receive hook.该脚本现在是:
#!/bin/bash
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( set -x
checkgit …
Run Code Online (Sandbox Code Playgroud) 我有一个使用Git的接收后电子邮件挂钩发送电子邮件(感谢这个SO帖子),但它发送的电子邮件只是纯文本.我想要一些更丰富多彩,格式更好的东西.
是否有一个脚本或我可以使用post-receive钩子运行的东西,它将发送一个格式良好的差异电子邮件,而不是纯文本的?
我想自动将后接收挂钩中的提交从我们LAN上的中央仓库推送到云中的另一个中央仓库.LAN repo使用git clone --mirror git@cloud:/path/to/repo
或等效命令创建.
因为提交的文件相对于我们的上游带宽会很大,所以完全有可能发生这样的事情:
当LAN repo的后接收挂钩执行时,将从LAN repo到cloud repo的第二次推送开始,并且两者将同时运行.
我并不担心git对象.最糟糕的情况是两个推送都会从Alice的推送中上传所有对象,但就我理解git的内部结构而言,这应该无关紧要.
我很担心裁判.假设Alice推动使用更慢的连接,因此Bill的推送首先完成.假设数据包丢失或其他原因导致挂钩从局域网仓库推送到Bill的推送云完成,然后钩子从局域网回购推送到Alice的推送云.如果Alice和Bill都在推动主分支并且Bill的推送首先完成,那么主要参与者将在云回购中做什么?我希望它成为比尔的头,因为那是后来的推动,但我担心这将是爱丽丝的头.
进一步澄清:
我意识到,如果比尔从他的机器推送到局域网回购完成,那么爱丽丝从她的机器到局域网回购的推动将会失败.在这种情况下,LAN repo的post-receive挂钩将不会执行.此外,请假设没有人会进行强制推送,因此如果后续接收挂钩在LAN repo上运行,则所有参考更改都是快进的.
让Github自动将任何更新推送到远程服务器的设置是什么?
这对于在Github上维护代码库以及让网站运行该代码库非常有用.
我在自己的电脑上有我的回购,这是我工作的地方.
我对我的本地仓库进行了更改,并将它们推送到我的Github仓库.
我希望我的Github repo然后将这些更改推送到我的远程服务器.
我整天都在研究,使用'钩子'听起来很合理.也许在Github上使用'post-receive'钩子,然后向我的远程服务器运行push命令.
有什么建议?
起初我的服务器的git版本是2.7.4,错误是准确的.然而,之后,我更新并使用git版本确认了这一点:
服务器
$ git --version
git version 2.13.0
Run Code Online (Sandbox Code Playgroud)
客户
$ git --version
git version 2.11.0 (Apple Git-81)
Run Code Online (Sandbox Code Playgroud)
然而,当我试图推动这种情况时:
$ git push --push-option=test
fatal: the receiving end does not support push options
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
即使根据文档,这应该在客户端版本和服务器版本中都受支持:
2.11.0
2.13.0
我甚至在每个上创建了两个新的本地存储库,然后尝试从另一个本地存储库推送到另一个本地存储库(因此它甚至不在另一个服务器之间进行通信)但我仍然遇到了这个错误.有什么我必须启用?我无法找到关于必须在文档上执行此操作的任何内容.
git-post-receive ×10
git ×9
githooks ×3
hook ×2
amazon-ec2 ×1
backup ×1
bash ×1
concurrency ×1
deployment ×1
diff ×1
formatting ×1
github ×1
gitosis ×1
hudson ×1
jenkins ×1
nginx ×1
reset ×1