【问题标题】:Getting the remotes along when pulling a local repo拉取本地仓库时使用遥控器
【发布时间】:2013-01-08 06:44:54
【问题描述】:

常见情况:

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

【问题讨论】:

    标签: git git-clone git-remote


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 实际上,这种情况经常发生——我们部署在很多主机上,有时会多次测试功能。我喜欢你的想法,但在我的环境中(大型学术机构的小型团队致力于原型软件)从部署到我的工作站需要与系统管理协商防火墙例外或更大的 NFS 配额。
    • @larsmans:我不敢苟同。如果您可以通过 ssh 进入该站点并在那里运行 git(显然可以),您可以使用 ssh 协议从中提取。
    • 啊,我没想到!我的印象是,您甚至需要一台专门的服务器才能让 SSH 正常工作。
    • @larsmans:ssh 的拉取只是调用ssh host git upload-pack /path/to/repo。本地拉取也使用相同的命令。其他协议服务器也是标准 git 的一部分,git daemon(git 协议)、git update-server-info(哑 http)和git-http-backend(智能 http),但对于您可以通过 ssh 访问的任何服务器,ssh 显然是最方便的。
    猜你喜欢
    • 2016-06-17
    • 1970-01-01
    • 2017-08-18
    • 2012-06-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多