3

常见情况:

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没有成功。

4

1 回答 1

4

不值得编写脚本,因为每个项目(和每个人)最多执行一次!

事实上,当你遇到这种情况时,你几乎肯定有一个本地存储库,不是吗?然后你要做的最后一件事是一个新的克隆。

相反,只需git remote add deployed /path/to/deployed/project在您现有的常规工作区中,并使用( )git fetch deployed做任何您想做的事情— 您可以将它直接推送到或检查它或它或它或任何东西。deployed/masterrefs/remotes/deployed/masteroriginmergemerge --rebase

请注意,如果您可以 ssh 进入服务器并在那里运行 git(如果您在那里破解,则可以),您也可以通过 ssh 协议从那里 git pull 。而且它很高效,因为 ssh 协议只是在远程端运行 git 并使用相同的 git 协议与之对话,只是通过 ssh 进行隧道传输。所以在你的本地机器上,你应该能够git remote add deployed host:/path/to/deployed/project;最好使用完整的主机名、用户名和公钥进行host配置,但也可以。.ssh/configuser@host

在生产服务器上,我建议切换回以前的版本,在其他地方修复并再次推送以限制停机时间。在测试和预生产时,这当然没问题。

于 2013-01-24T14:00:29.060 回答