【问题标题】:How does Git know which repository to push to?Git 如何知道要推送到哪个存储库?
【发布时间】:2012-09-26 04:24:05
【问题描述】:

在版本控制方面,我完全是个菜鸟,但我最近开始使用 GitHub 来托管我的一些项目。我盲目地使用命令git push origin master 将更改推送到两个存储库中的任何一个。我不明白 Git 如何知道要推送到哪个存储库。我使用相同的命令推送到每个。我所在的目录和它有什么关系吗?

感谢您为我解决这个问题。

【问题讨论】:

  • 检查link here
  • 为什么你“盲目地使用”某些命令,却不知道它的实际含义和作用。为了避免在某个阶段之后出现混乱,最好花点时间阅读 git 文档和工作流程。

标签: linux git version-control push


【解决方案1】:

一句忠告,“盲目使用”任何东西都是一个坏主意。

git 有一个remotes 系统,它允许指定 URL 并传输到您正在工作的存储库以外的存储库。 git push origin master 将当前分支推送到远程称为 origin 作为分支主控。您有一个名为 origin 的遥控器。这是从 URL 克隆存储库时默认创建的。

【讨论】:

  • 我很困惑,因为我可以在我的任何 repos 中使用相同的命令进行推送(因为我将两个遥控器都命名为“origin”)。它不像 origin 是某种全局 Git 变量或其他东西,所以它必须是特定于目录的东西。我认为 Fraxtill 提到的 .git 目录可能对此负责。
  • git 目录存储了你项目的所有信息。它是 存储库。删除它,该目录不再是存储库。遥控器的实际列表和它们指向的 URL 位于 .git/config
【解决方案2】:

git remote add origin http://abc.com/def/ghi.git 告诉 git 远程 'origin' 指向的 url。

【讨论】:

    【解决方案3】:

    当您使用git push origin master 时,您不会推送到两个存储库 - 您正在推送到名称(别名)为源的存储库中的主分支。

    这样想:

    我将我的东西推送到我的存储库地址。我在推什么?我的主分支。

    如果您是新手并通过 git init 自己设置 git,那么您可能不会推送到两个存储库。运行此命令以查看您的遥控器是什么:

    git remote -v
    

    这将返回类似的东西(假设你有一个像 github 这样的 git 托管服务):

    blahblah    git@github.com:yourGithubName/fileName.git (fetch)
    blahblah    git@github.com:yourGithubName/fileName.git (push)
    

    git@github.com:yourGithubName/fileName.git 是你的仓库地址。有些地址以 https:// 为前缀。

    【讨论】:

      【解决方案4】:

      Git 存储库包含一个 .git 目录,其中包含有关存储库的元数据。这就是 Git 用来确定将更改推送到何处的方法。

      【讨论】:

      • 这是否意味着我们必须先cd 到正确的目录?如果我们在该 repo 的子文件夹中怎么办?如果我们在没有 .git 目录的错误目录中会发生什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 2017-08-26
      相关资源
      最近更新 更多