Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Git会使用类似于“Git”这样令人困惑的名称;来源:foo“&引用;遥控器/原点/foo“;,及;原产地/foo”吗;?_Git_Git Fork - Fatal编程技术网

为什么Git会使用类似于“Git”这样令人困惑的名称;来源:foo“&引用;遥控器/原点/foo“;,及;原产地/foo”吗;?

为什么Git会使用类似于“Git”这样令人困惑的名称;来源:foo“&引用;遥控器/原点/foo“;,及;原产地/foo”吗;?,git,git-fork,Git,Git Fork,我被要求使用Fork工作流,即我必须处理具有相同或相似名称的多个分支。为什么我要使用这些不同的变体 以下是一些不同命名约定的示例: 我的分行 起源我的分支 起源/我的分支 遥控器/原点/mybranch 上游我的分行 上游/我的分行 仔细背诵一系列记忆的Git命令。Git有一个。了解git命令在对象模型方面的工作方式,以及您想做的事情如何与命令的工作相适应。根据我的经验,运行记忆中的命令有时会导致多次重复调用同一序列,这会以奇怪的方式混淆历史。在困惑的队友来寻求帮助后,我坐下来,看看当前的状态

我被要求使用Fork工作流,即我必须处理具有相同或相似名称的多个分支。为什么我要使用这些不同的变体

以下是一些不同命名约定的示例:

  • 我的分行
  • 起源我的分支
  • 起源/我的分支
  • 遥控器/原点/mybranch
  • 上游我的分行
  • 上游/我的分行

仔细背诵一系列记忆的Git命令。Git有一个。了解git命令在对象模型方面的工作方式,以及您想做的事情如何与命令的工作相适应。根据我的经验,运行记忆中的命令有时会导致多次重复调用同一序列,这会以奇怪的方式混淆历史。在困惑的队友来寻求帮助后,我坐下来,看看当前的状态,搔搔头,然后问“你怎么会处于这种状态?”

跟踪分支的命名方案(例如,
origin/mybranch
remotes/origin/mybranch
-甚至
refs/remotes/origin/mybranch
上游/mybranch
)泄露了分支名称空间的实现细节,即。
refs
remotes、
origin
是未打包存储时的物理目录。请参见
.git/refs
下目录层次结构中的“或去探险”

Git接受分支的缩写名称以方便用户,类似于用户不需要键入整个40个字符的SHA1对象名。报告解释道

,例如
母版
磁头/母版
参考/磁头/母版

一个符号化的ref名称。例如,
master
通常表示提交对象 由
refs/heads/master
引用。如果你碰巧两者都有
heads/master
tags/master
,您可以明确地说
heads/master
,告诉Git您指的是哪一个。当出现歧义时,
通过以下规则中的第一个匹配来消除歧义:

  • 如果存在
    $GIT\u DIR/
    ,这就是您的意思(这通常仅适用于
    头部
    提取头部
    原始头部
    合并头部
    樱桃头

  • 否则,
    refs/
    (如果存在)

  • 否则,
    refs/tags/
    (如果存在)

  • 否则,
    refs/heads/
    (如果存在)

  • 否则,
    refs/remotes/
    (如果存在)

  • 否则,
    refs/remotes//HEAD
    (如果存在)

  • Git文档将
    refs/remotes/origin/foo
    称为符号全名或全名,它们有助于通过名称指定精确的引用,而不会产生歧义,例如在自动化程序中

    请注意,
    mybranch
    指的是您的本地
    mybranch
    ,而不是其跟踪分支(或远程跟踪分支)
    origin/mybranch
    上游/mybranch
    。跟踪分支会随着每次提取或拉取而更新。把它们想象成你历史上的书签,或者你上次拉遥控器时,遥控器的分支所在的道路上的路标。
    mybranch
    origin/mybranch
    引用不同的提交是可能的,并且经常发生

    相反,
    origin-mybranch
    从不指
    origin/mybranch
    mybranch
    。Git没有“
    /
    运算符”。这种想法将这两个独立的参数从上下文中分离出来。请记住,Git是一套命令行工具,命令行工具接受参数作为位置参数,Unix命令shell通过空格分割参数。在上下文中,命令

    git push origin master
    
    有一般形式

    git push <remote> <branch>
    
    git推送
    

    也就是说,其中一个参数命名为远程,另一个参数命名为(通常是本地)分支。因此,在英语中,它的意思是“将我的
    (本例中名为
    master
    )上的提交推送到远程(本例中名为
    origin
    )”。

    之所以让人困惑,是因为Git不是一次编写的。Git是在多年的时间里编写的(现在已经接近二十年了)。早就犯了一些错误,;有些事情不太方便,;Git的向后兼容性可以追溯到2005年,如果不是更早的话

    您需要知道的是,Git现在已经:

    • 遥控器。遥控器是一个简单的短名称,如
      origin
      upstream
      。遥控器有两个功能。最重要的一点是,它可以让您避免反复键入URL

      当您运行
      git clone
      时,您会自动获得一个遥控器。此遥控器的名称默认为
      原点
      (您可以更改它,但没有真正的理由这样做)。因此,几乎每个Git存储库都有一个
      来源
      ,因为大多数人通过克隆来创建Git存储库

    • “Fork”只是“clone”的一个web托管服务变体,具有附加功能。在您为web托管服务创建分支之后,通常必须创建自己的附加克隆。因此,在创建fork之后,现在有三个独立的Git存储库:

      • 您在web托管服务上分叉的那个。你根本控制不了这个
      • 你的叉子在网络托管服务上。托管服务实际上控制这个Git存储库,但它们为您提供web页面和URL,以便将控制权委托给您
      • 在您自己的计算机上复制。此克隆有一个URL,保存在名称
        origin
        下,可用于控制web托管服务上的fork

      有序
      git pull <url> <branch>
      
      git remote add origin http://some.web.host/some/long/path/to/repo.git
      
      git checkout dev
      ...
      git pull origin dev
      ...
      git push origin dev
      ...
      git pull origin dev
      ...
      git push origin dev
      
      git pull <big-long-url> dev
      
      git pull origin dev