gpt4 book ai didi

git - 如何推送和自动更新我的非裸远程 git 存储库的工作副本?

转载 作者:行者123 更新时间:2023-12-02 18:38:01 25 4
gpt4 key购买 nike

另请参阅此相关问题,它有最新的答案:https://stackoverflow.com/a/28262104/7918 .

如何推送和自动更新我的非裸远程 git 存储库的工作副本?

在 git 人们会说“这是不安全的”之前,请让我解释一下为什么在我的情况下这会起作用。我有存储库 foo在机器上AB . A恰好是我的本地机器,B位于 super 计算网格上。项目正常开发于A (经过一些测试)然后推送到 B进行更多测试并将作业提交到网格。两个存储库都有工作目录。 A 上的存储库和 B是私有(private)的并与我的用户帐户相关联。

现在 git flow 是这样的:

  • 提交 A
  • A
  • 获取 B
  • merge B

  • 我宁愿省略步骤 3 和 4。即: 我想在推送时更新远程非裸存储库 , 如果从 A 更改可以自动安全地 merge (即:当 merge 是快进时, B 上的工作目录是干净的)。

    第一个解决方案是在 B 上删除存储库只需使用 rsync同步代码,但这是不可取的,因为有时我会直接在 B 上进行一些更改,并且不希望这些更改被轻易覆盖。

    第二个建议是安装 this patch ,甚至被 merge 到 mysysgit (但不是正确的)。这个补丁增加了 updateInstead receive.denyCurrentBranch 的值git 选项。这是可行的,但我宁愿不在许多机器上修补 git。

    第三种解决方案( taken from here )将涉及拥有三个 git 存储库: A , B' , B .在哪里 B'裸露并使用 Hook 同步 AB .这真的很简单,但我想拥有三个存储库可能会增加整个系统的脆弱性。

    最后一个解决方案是首选:即使用存储库上的 Hook B自动将推送的更改 merge 到工作副本。每个人都说这样做很简单,但我想我对 git 内部知识的了解太薄弱,无法修补一些明智的东西。我对此做了一些工作,但没有任何实际工作。

    我在找什么:
  • 基于钩子(Hook)的解决方案,将在推送时自动 merge 远程非裸仓库。这不会:要求我重新编译 git,并创建额外的存储库。
  • 最佳答案

    我印象深刻,但也被上面答案中的思想深度吓倒了。假设我已经完成了本地提交,我最终只写了一个蹩脚的小 bash oneliner 来完成我想要的大部分工作:git push origin master; ssh -t ec2-user@XXX.com 'cd /var/www/XXX.com/httpdocs; bash --login'这让我进入了运行 git pull 的工作目录;我本可以将它添加到脚本中,但不知道如何让它在我的登录目录中查找我的 SSH key 。所以我仍然必须输入“git pull”然后“退出”,但它比以前更好了!

    关于git - 如何推送和自动更新我的非裸远程 git 存储库的工作副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25207942/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com