“git remote add origin”,“set-url origin”和config ...有什么区别?

时间:2017-04-16 08:02:09

标签: git

似乎至少有3种方法可以做同样的事情。

# 1. git remote add origin https://x@bitbucket.org/x/y.git
# 2. git remote set-url origin ssh://git@bitbucket.org/x/y.git 
# 3. git config --local remote.origin.url ssh://git@bitbucket.org/x/y.git
  • 他们有什么不同?
  • 首选或标准方式是什么?

注意:这似乎与THIS重复,但这些答案不完整,并不解释更改网址与“远程”的区别?

修改

进一步谷歌搜索:从this回答:

  

git中的remote基本上是不同存储库的书签   您可能希望从中提取或推送代码。书签   存储库可能位于本地计算机上的其他文件夹中   远程服务器,或者它甚至可能是存储库本身......但是   最简单的类比是书签。存储库甚至不必   您的存储库的一个版本,它甚至可能是完全不相关的   库中。

this

  

origin 远程存储库名称。它是一个本地别名集,作为远程​​存储库URL的密钥。

3 个答案:

答案 0 :(得分:5)

git remote命令用于操作(使用,添加和删除)遥控器。它有十个(!)子命令:

  1. git remote add
  2. git remote rename
  3. git remote remove
  4. git remote set-branches
  5. git remote set-head
  6. git remote get-url
  7. git remote set-url
  8. git remote show
  9. git remote prune
  10. git remote update
  11. 每个子命令可以有自己的子子命令或选项;如果根本没有子命令运行,git remote只列出所有遥控器。

    无论出于何种原因,您只询问十个子命令中的两个:addset-url。这可能是因为您不确定首先是远程是什么。简短的回答是远程只是一个名称,但它是一个用于的名称,用于跟踪另一个Git存储库,在其他URL上。

    虽然origin是一个非常标准的远程名称,但它不是唯一可能的远程名称 - 而您自己的存储库可能有 no 远程名称,在这种情况下origin不是你的某个遥控器的名称,因为你没有。

    尽管如此,许多(如果不是大多数)存储库只有一个远程存储库,因为git clone创建了很多存储库。 git clone命令自动创建一个名为origin的遥控器,除非您告诉它使用其他名称。因此,大多数存储库已经有一个名称origin

    git remote add

    git remote add的用途是添加远程。如果你现在有一个遥控器,并且你添加另一个遥控器,那么你将有两个遥控器。如果你没有,并添加一个,你将拥有一个。

    同样,远程的目的是命名另一个Git存储库,并在某个URL上找到其他Git存储库。因此,要使远程有用,它需要一个URL。所以git remote add有两个参数:要添加的 new 远程名称,以及与该名称关联的URL。

    (这省略了许多用遥控器可以做的更特别的事情。我从来没有发现它们中的一些有用,但它们是git remote add有一堆选项标志的原因。 )

    git remote set-url

    git remote set-url的用途主要是更改与某些现有遥控器相关联的网址。因此,它采用现有远程名称和新URL。默认操作是删除旧URL并插入新URL。

    Git尝试不在此限制您使用单个网址:它允许将多个网址附加到每个指定的网址。准确地说,当任何一个遥控器有多个URL时会发生什么有点棘手;在您熟悉单URL遥控器之前,最好不要这样做。

    git config

    git config命令是一个低级别的事情。您可以在Git中进行或更改的大多数设置最终都是通过配置条目完成的,这包括添加或删除遥控器以及更改与任何一个特定遥控器关联的URL。这意味着更高级git remote命令通常会转换为一个或多个低级git config操作。如果您确切地知道哪些配置条目控制哪些遥控器在哪种方式,您可以使用git config来实现git remote所做的一些相同的事情。

    git remote可以做的一些事情不仅仅是配置设置,所以并非所有内容都可以像这样翻译。但是添加或删除遥控器,并更改其网址, ,因此可以

    添加新的遥控器主要包括运行两个git config命令。如果远程名称是 R ,则两个配置项为remote.R.urlremote.R.fetch。设置第一个而不设置第二个通常不是一个好主意,你需要知道将第二个设置为的内容,因此使用git remote添加新的遥控器会更安全。

    更改现有远程的(单个)URL包括仅运行一个 git config命令。对于远程 R git config remote.R.url new-url--localgit config的默认设置,因此您可以省略它。该URL不会影响fetch值,因此使用git config执行此操作而不是使用git remote来执行此操作是安全的(尽管有点无意义)。但是,如果 多个URL附加到某个特定的远程名称,git remote会添加git config完全绕过的安全检查。

答案 1 :(得分:1)

没什么不同,但是它们是不同的

实际上,当您运行git remote add origin git@github.com:User/TestRepo.git时,会创建一个新的名为 origin 的遥控器。

运行git remote set-url origin git@github.com:User/TestRepo.git时,git搜索具有相同名称​​ origin 现有远程服务器,并更改它的远程存储库URL,但是git无法找到任何远程具有名称来源,它将引发致命错误:No such remote 'origin'

答案 2 :(得分:0)

在第一种情况下,当您运行remote origin some@github.com/User/repo时,您会创建一个新的远程,名称为origin

在另外两个案例中,git正在搜索现有的遥控器,名称为origin 这些示例没有首选方法,因为命令会产生不同的内容。