如何在不首先克隆的情况下“连接”一个 git 存储库?
Posted
技术标签:
【中文标题】如何在不首先克隆的情况下“连接”一个 git 存储库?【英文标题】:How to "connect" a git repository without cloning it first? 【发布时间】:2016-04-28 01:38:04 【问题描述】:我在 bitbucket 上获得了一个 git repo,几个月前用于 php 应用程序。
我现在有一个新服务器,我想在该存储库上连接此应用程序的本地文件夹。对我来说挑战是本地版本现在比 bitbucket 版本更新。我是 git 的新手,我发现的说明总是暗示我们首先克隆 repo。我不想先覆盖本地文件。
【问题讨论】:
本地目录本身是git仓库吗? (里面有.git
目录吗?)如果没有,这段代码是从哪里来的?您是否尝试将此新代码推送到旧存储库之上?
新代码确实覆盖了旧存储库。
从非 git 目录开始并推送到同一个项目的 git 存储库是一项不平凡(虽然不困难)的操作。没有一种自动化的方法可以做到这一点。
【参考方案1】:
我认为您想添加或更改遥控器。更改默认远程使用git remote set-url origin <url>
或添加新远程使用git remote add
【讨论】:
这允许您将更改拉入现有存储库(可以为空),但最终与克隆并没有太大区别;至少,尤其是对于非专业用户而言。 @tripleee 如果当前代码具有某个其他存储库的远程,而不是根本不受 git 管理或首先没有本地代码,则不同。 OP 可能处于这种情况,或者他们可能没有对当前代码的 git-management 不清楚。 使用您的提示,我对语法进行了一些搜索并最终做了:git init
(因为确实不是 .git 目录)然后git remote add Yii-Mailnetwork https://name@bitbucket.org/name/name.git
我做了一个推送,它回答:一切up-to-date 但是没有真正推送。
@Yann de Champlain E-SOFT inc.,您是否创建了要推送的提交?
@YanndeChamplainE-SOFTinc。现有存储库上是否已经有提交?正如@ikegami 所说,您需要做出承诺以将数据推送到上游。但是,如果有现有的提交,您将不得不更加小心。运行 git init
然后提交本地更改会创建一个新的历史记录,该历史记录将与先前存在的历史记录发生冲突。【参考方案2】:
代替:
git clone remote-url .
没有 Git 仓库的目录
如果您没有在您正在工作的目录中已经有一个 repo,那么这种方法将有效:
git init
git remote add origin remote-url
现有 Git 存储库的目录
如果您确实在您正在工作的目录中已经有一个 repo:
git remote update origin remote-url
现在您有一个已克隆的存储库,但已连接到您的远程源。
【讨论】:
【参考方案3】:如果您有一些文件的本地(非 git 修订版)目录和同一项目的 git 存储库,并且您希望使用本地文件的内容更新 git 存储库,那么您需要将存储库克隆到它的自己的目录,然后手动将所有本地文件复制到克隆目录的顶部,然后添加、提交并将新内容/更改推送到远程 git 服务器。
$ git clone https://name@bitbucket.org/name/name.git
# If the directory structures are identical then you might be able to do this with a single `cp`.
$ cp -r /path/to/local/code/* name
$ cd name
$ git status
# will show all the changed files, added files, etc.
然后您可以使用普通的 git 操作来添加和提交您的更改,然后在完成后将它们全部推送。如果你想要一个大的“更新的东西”提交,你可以批量添加并提交更改,但我强烈建议尽可能避免这种情况(以保持存储库历史至少稍微健全和易于理解),在这种情况下你可以创建使用git add -p
等原子提交更改片段。
【讨论】:
【参考方案4】:将远程存储库连接到本地源:
git init
git remote add origin remote-repository-url
要更改存储库:
git remote set-url origin remote-repository-url
【讨论】:
【参考方案5】:无需任何 Git 初始化或克隆,您就可以这样做:
git ls-remote [url]
这是你的输出:
5fe978a5381f1fbad26a80e682ddd2a401966740 refs/heads/master
d6602ec5194c87b0fc87103ca4d67251c76f233a refs/tags/v0.99
在这里查看更多Git Documentation git ls-remote
【讨论】:
以上是关于如何在不首先克隆的情况下“连接”一个 git 存储库?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不首先克隆整个 repo 的情况下将文件添加到远程 Git repo (Github)
如何在不克隆它所连接的存储库的情况下触发 Jenkins 构建?