如何在不首先克隆的情况下“连接”一个 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 构建?

是否可以在不重写历史记录的情况下精简 .git 存储库?

如何在不分叉的情况下在 gitlab/github 上复制 git 存储库?

如何在不下载其父文件夹的情况下签出或克隆文件夹

PHP-如何在不重新启动 rds 的情况下将 aws.push git 到弹性 beantalk?