常见情况:
deployer$ git clone git://gitserver/project.git
deployer$ cd project
deployer$ ./deploy
Lots of errors!
deployer$ hack --until-it-works deploy
deployer$ git commit -m "fixed it" deploy
糟糕,现在我无法推送,因为deployment-account
没有正确的密钥。所以,回到我自己的帐户。
larsmans$ cd /tmp
larsmans$ git clone /path/to/deployed/project
larsmans$ cd project
但现在我无法推送,因为遥控器未设置为原始克隆的遥控器。
larsmans$ git remote -v
origin /path/to/deployed/project/ (fetch)
origin /path/to/deployed/project/ (push)
我可以克隆本地目录并获取遥控器吗?我可以轻松地为此编写脚本,但也许Git内置了它。我在git-clone(1)
中找不到相关选项; --mirror
没有做到这一点。
答案 0 :(得分:4)
这不值得编写脚本,因为每个项目(和人)最多只能执行一次这样的操作!
事实上,当你遇到这种情况时,你几乎肯定有一个本地存储库,不是吗?然后你要做的 last 是一个新的克隆。
相反,只需git remote add deployed /path/to/deployed/project
现有的常规工作空间git fetch deployed
并使用deployed/master
(refs/remotes/deployed/master
)执行任何操作 - 您可以直接将其推送到{{1或者查看它或origin
它或merge
它或任何东西。
注意,如果你可以ssh进入服务器并在那里运行git(你可以在那里进行攻击),你也可以通过ssh协议git pull。并且它是高效的,因为ssh协议只是在远程端运行git并使用相同的git协议与它进行对话,只是它通过ssh进行隧道传输。所以在你的本地机器上,你应该能够merge --rebase
;我希望git remote add deployed host:/path/to/deployed/project
中host
配置完整的主机名,用户名和公钥,但.ssh/config
也适用。
在生产服务器上,我建议切换回以前的版本,修复其他地方并再次推送以限制停机时间。在测试和预生产时,这当然没问题。