在一个"update" git 钩子中,我可以 cd 到克隆,"git fetch",然后"git checkout"新提交吗?



在"更新"git 钩子中,我正在尝试 cd 到存储库的克隆,运行 git fetch ,并git checkout新提交。但我认为提交还不存在。有什么办法可以做到这一点吗?我尝试做git archive [sha]但考虑到这个钩子在我们公司运行的频率,这需要很长时间。

我应该签出更新的基本引用,然后应用生成的补丁或其他东西吗?

我最终得到了这样的东西:

git diff [OLD-COMMIT] [NEW-COMMIT] > /tmp/update.patch
cd /path/to/the/existing/clone
git fetch origin
git reset --hard [OLD-COMMIT]
git apply /tmp/update.patch
# Run tests

效果很好。

对于您的用例,我唯一能想到的就是拥有 2 个 git 存储库。工作流程会像这样。

git commit
git push ServerA
# post-receive checks out commit and runs unit tests
# ERROR: message returned
# fix your code
git commit
git push ServerA
# post-receive checks out commit and runs unit tests
# SUCCESS: pushes to ServerB

由于您想引用提交(需要post-receive(能够拒绝提交(需要pre-receive(,不知道是否有更好的方法。 我会说正常的工作流程是在本地运行一些测试,然后推送到存储库以运行完整的测试。 如果失败,请推送一个固定提交,然后当您将所有内容合并到开发/主分支中时,您可以重新设置所有额外提交的基础。

相关内容

  • 没有找到相关文章

最新更新