同一个 GitHub 帐户的多个遥控器

Multiple remotes for the same GitHub account

我想在我的 GitHub 帐户中有多个存储库,这些存储库与我现在正在工作的各种 Android Studio 项目相关联。我已经完成了我的第一个,并将其推送到我的 GitHub 帐户中的存储库。但是当我试图将另一个 Android Studio 项目推送到不同的存储库(在同一个 GitHub 帐户中)时,出现以下消息:couldn't add remote: remote origin already exists..

在网上查找更多信息后,我设法了解了遥控器工作原理的基础知识以及解决问题的方法。但是我不能完全理解的是,如果我每次在处理一个新项目时都必须更改这个默认远程(以 origin 为例)并且我想将更改推送到我的 GitHub 存储库。根据一些解决方案,您可以使用 `git remote add name URL 命令将此(一个?)远程更改为不同的 URL。

我是不是遗漏了一些东西,或者每次有人想在不同的项目中推送一些更改(在同一个 GitHub 帐户上转到不同的存储库)应该先执行此 git remote add <name> url 程序?即使您必须在同一天将多个更改推送到不同的项目?为什么我不能使用多个名称不同的遥控器,这些遥控器只能设置一次并链接到同一 GitHub 帐户的特定 projects/repositories?

远程原点url是每个项目特定的,每个项目只需要设置一次。所以在你的开发机器上你有很多项目,在每个单独项目的根文件夹中你使用 git init 初始化一个 git 存储库。这会在该根文件夹中为您的特定项目初始化一个本地 git 存储库,而不是为整个机器。

当您为该特定项目设置 bitbucket 或 github 或任何存储库时,您需要告诉本地项目 url 仅适用于该特定项目。 通过添加远程源来确保您位于特定项目的根目录中并使用 git remote add origin someurl 来执行此操作,其中 someurl 是远程存储库的 url。 一旦为每个单独的项目设置了这些,您就不必更改它们。因为它们是针对本地项目根目录中的本地存储库设置的,所以当您 运行 git push 或第一次使用 git push origin main 或 master 或主根目录的任何名称时 git 分支是第一次,然后 git 会自动知道每次推送到哪里,因为你 运行 在你的项目根文件夹中使用这些命令 git 会在您的项目特定存储库中选择那个遥控器 url。

所以澄清一下,git 命令是特定于存储库的。只要您在每个项目的根目录中都有一个初始化的本地 git 存储库,并且命令 运行 仅来自该项目特定的根文件夹,那么您每次推送时都不需要更改任何内容

我不完全确定发生了什么事让你变成现在的状态,但我认为出了点问题。我将提供一个解释,我希望它会有所启发,但如果不是,请 post 为您的项目提供 .git/config 文件的副本并更新您的问题。

远程是 git 可以找到要与之同步更改的存储库的规范。它通常是 URL,但它甚至可以是当前计算机上的文件路径,您在该计算机上有另一个存储库副本。

这意味着每个项目都有自己的遥控器。

如果我在 https://github.com/codeinred/tuplet.git 克隆了一个名为 tuplet 的项目,那就是该项目的遥控器。如果我创建一个不同的项目,它会得到一个不同的遥控器。

如果您在本地机器上创建了一个项目,并且您想要稍后添加一个远程存储库,首先您需要确保远程存储库存在(转到 github 并创建一个新项目) ,那么您需要为 那个特定项目 复制 git url。这是你使用 git remote add 的时候。如果您将遥控器重新用于现有项目,它可能会拒绝推送,因为该遥控器已经存在。

旁注:拥有多个遥控器。

有时一个本地存储库有多个远程。这是您有意设置的,因为您想跟踪项目的不同版本。

例如,当我 fork 一个项目时,我会为原始存储库添加一个远程,这样我就可以下载他们所做的任何更改。通常,此遥控器将被命名为 upstream.

git remote add upstream
# Download upstream changes
git fetch upstream

# Compare your changes to theirs
# Use the name of whatever branch you want to compare
git diff main upstream/main

# Merge changes into your current branch
git merge upstream/main