【问题标题】:How to git push to remote if remote does not exist at all如果远程根本不存在,如何 git 推送到远程
【发布时间】:2012-07-08 02:44:49
【问题描述】:

如果远程(使用 ssh)不包含 git 存储库,是否仍然可以将本地存储库复制到远程并设置远程跟踪,而无需使用 scp 手动复制文件,然后执行 git clone?

【问题讨论】:

    标签: git


    【解决方案1】:

    是否仍然可以将本地存储库复制到远程并设置远程跟踪,而无需使用 scp 手动复制文件,然后执行 git clone?

    如果您有 ssh 访问权限,则可以复制 repo(是的,使用 scp),但只复制 一个 文件:git bundle

    从那里,您可以在远程服务器上克隆该捆绑包作为裸仓库(一个文件充当您可以克隆的仓库)并将其用作远程仓库(您可以推送到远程裸仓库)。

    与直接推送到空的裸存储库相比,优势在于这里的初始副本是一个文件。对于大型存储库,这可以使初始化更容易/更少依赖网络。

    【讨论】:

    • 这似乎是一个非常好的答案。但是,我不得不两次回答这个问题才能理解这一点。可能是接受度较低的原因。
    • @Ashish 9 年后,我同意。我已经在我的答案中复制了问题的相关部分,至少让它更接近。
    【解决方案2】:

    确实需要在远程设置存储库,但您不应该手动复制文件。至少,你不会得到它的历史。

    首先,通过 ssh 连接到您的遥控器并执行以下操作:

    mkdir your_repo.git
    cd your_repo.git
    git init --bare
    

    目录名称中的.git 是完全可选的。 --bare 选项使存储库没有索引,因此是可推送的。

    然后您返回本地存储库并添加远程:

    git remote add remote_name user@remote.address:path/to/your_repo.git
    

    你已经准备好了。您现在需要做的就是:

    git push remote_name
    

    【讨论】:

    • 谢谢,如果我希望我的遥控器不是裸仓库,也可以吗?谢谢
    • 一般来说,这不是一个好主意。我不确定这是否可能,但即便如此,推送到非裸存储库意味着在该存储库上,您的所有内容都需要合并而不会引起冲突,但不能保证这一点。另请参阅hereherehere
    猜你喜欢
    • 2016-10-07
    • 1970-01-01
    • 2014-11-18
    • 2011-09-10
    • 2016-07-08
    • 2018-05-02
    • 1970-01-01
    • 2015-08-29
    • 2018-06-24
    相关资源
    最近更新 更多