【问题标题】:Git: Connect existing local repository to existing remote repositoryGit:将现有的本地存储库连接到现有的远程存储库
【发布时间】:2020-09-23 09:35:57
【问题描述】:

这可能是非常基本的,但我还没有弄清楚:

我有一个 PHP 项目在两台服务器上运行,我们将它们称为 LiveStaging
两台服务器显然都在运行同一个项目,但有一些变化。
该项目在我手中时不在 Github 上,所以这就是我现在首先要做的事情。

我设法在 Github 上创建了一个新的远程存储库并将 Live 系统连接到它。
(通过将 Github 存储库添加为 Live 上的“来源”)
git remote add origin https://github.com/path-to-repo/repo.git

因此 Live System 目前位于 masterbranch 上,并且与 origin/master 保持同步,origin/master 有 4 次提交的历史记录。

现在我也在尝试在 Staging 上连接 Github 存储库

所以我做了一个

git init
git remote add origin https://github.com/path-to-repo/repo.git
git remote -v

origin  https://github.com/path-to-repo/repo.git (fetch)
origin  https://github.com/path-to-repo/repo.git (push)

git fetch

现在,当我执行 git status 时,我看到 repo 仍处于初始提交状态,并且所有文件和文件夹都被列为未跟踪:

 root@staging-host:/var/www/html# git status
 On branch master

 Initial commit

 Untracked files:   (use "git add <file>..." to include in what will be
 committed)

         .htaccess
         README.md
         _index.html
         api/
         app/
         composer.json
         global/
         index.php
         package-lock.json
         package.json
         phpinfo.php
         system/
         vendor/
         view/

origin/master 中的上次提交相比,我如何检查本地更改
我不想放弃任何本地更改,但也不想提交或推送任何内容
在逐个文件决定要提交什么以及要重置什么之前,我需要先检查差异

【问题讨论】:

    标签: git github git-remote git-fetch


    【解决方案1】:

    您的方法几乎是正确的。看看你的命令:

    git remote add origin https://github.com/path-to-repo/repo.git
    

    这会尝试将远程 repo 添加为源并失败,因为它已经存在。

    运行

    git remote -v
    

    您会看到这是您的实时存储库。换个名字,比如

    git remote add staging https://github.com/path-to-repo/repo.git
    

    然后它应该可以工作。如果 origin 是 live 并且 staging 是 staging,那么拉,推到 staging 如下:

    git pull staging <branch>
    

    git push staging <branch>
    

    分别。如果我是你,我会更喜欢 origin 指向 staging 而另一个名为 live 的遥控器会指向 live,因为你会更频繁地使用 staging。

    编辑

    显然我误解了这个问题。基本上有一个由 GitHub 托管的存储库,您也希望将其用于暂存。你不需要运行

    git init
    

    在这种情况下也不要添加遥控器。你只需要克隆 repo,比如

    git clone https://github.com/path-to-repo/repo.git
    

    【讨论】:

    • 也许我现在没有正确理解这一点,或者这只是错误的方法,但我目前正在尝试将 Live 和 Staging Push 和 Pull 到远程存储库Github,不是彼此。当我运行 git remote -v我得到这个输出: origin github.com/path-to-repo/repo.git (fetch) origin github.com/path-to-repo/repo.git (push) 我也将它添加到我的原始帖子中。我基本上将远程 repo 添加为 live 和 staging 系统的来源。这在现场不是问题,因为那时原点是空的,我可以提交。
    • @Chaz live 和 staging 是两个独立的遥控器。您可以通过名称来识别遥控器。您想将 live 和 staging 都标识为 origin,但 origin 不再标识它们。如果两者都是起源,那么您不能通过 git push origin master 只推送到其中一个。您将需要通过不同的名称来识别它们。如果您想同时向/从两者推/拉,那么您可以为此目的编写一个 shell 脚本。但是一个遥控器应该是一个遥控器。
    • 我的设置方式并没有在某处添加实时和分期作为遥控器。 Staging 和 live 是运行项目的服务器,并且 github 存储库作为远程(源)添加到它们两者上,因此它们可以向/从 github 推送/拉取,而不是彼此
    • @Chaz 我意识到我最初误解了你的情况。现在我想我明白你的问题了。相应地编辑了我的答案。
    • 当我要克隆到的文件夹中已有文件时,这是否有效?因为不幸的是,这就是重点。而我一直认为不是。但我还没有尝试过,不幸的是现在不能尝试。但我稍后会检查。谢谢
    【解决方案2】:

    可能有更好的方法,但这应该可行。

    1. git add .
    2. git commit -m 'tmp'
    3. git diff HEAD origin/master
    4. git reset --soft HEAD~1

    您可以重置您为检查差异所做的提交

    【讨论】:

    • 这似乎确实有效,至少我能够检查差异。我在提交之前搬到了一个新的临时分支。现在,当我尝试重置时,我得到了这个:'fatal: ambiguous argument'HEAD~1': unknown revision or path not in the working tree。使用 '--' 将路径与修订分开,如下所示:'git [...] -- [...]'`` 我很想擦除 repo,拉从原始到最新的原始/主和实时的所有内容,然后从我制作的备份中复制登台代码。我只是认为必须有一种更简单的方法
    猜你喜欢
    • 2018-10-29
    • 2014-08-21
    • 2020-12-06
    • 2017-09-23
    • 2015-04-20
    • 1970-01-01
    • 2011-09-16
    • 2017-09-07
    • 2013-01-09
    相关资源
    最近更新 更多