为什么Git会使用类似于“Git”这样令人困惑的名称;来源:foo“&引用;遥控器/原点/foo“;,及;原产地/foo”吗;?
我被要求使用Fork工作流,即我必须处理具有相同或相似名称的多个分支。为什么我要使用这些不同的变体 以下是一些不同命名约定的示例:为什么Git会使用类似于“Git”这样令人困惑的名称;来源:foo“&引用;遥控器/原点/foo“;,及;原产地/foo”吗;?,git,git-fork,Git,Git Fork,我被要求使用Fork工作流,即我必须处理具有相同或相似名称的多个分支。为什么我要使用这些不同的变体 以下是一些不同命名约定的示例: 我的分行 起源我的分支 起源/我的分支 遥控器/原点/mybranch 上游我的分行 上游/我的分行 仔细背诵一系列记忆的Git命令。Git有一个。了解git命令在对象模型方面的工作方式,以及您想做的事情如何与命令的工作相适应。根据我的经验,运行记忆中的命令有时会导致多次重复调用同一序列,这会以奇怪的方式混淆历史。在困惑的队友来寻求帮助后,我坐下来,看看当前的状态
- 我的分行
- 起源我的分支
- 起源/我的分支
- 遥控器/原点/mybranch
- 上游我的分行
- 上游/我的分行
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
(如果存在)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
。遥控器有两个功能。最重要的一点是,它可以让您避免反复键入URL 当您运行upstream
时,您会自动获得一个遥控器。此遥控器的名称默认为git clone
(您可以更改它,但没有真正的理由这样做)。因此,几乎每个Git存储库都有一个原点
,因为大多数人通过克隆来创建Git存储库来源
- “Fork”只是“clone”的一个web托管服务变体,具有附加功能。在您为web托管服务创建分支之后,通常必须创建自己的附加克隆。因此,在创建fork之后,现在有三个独立的Git存储库:
- 您在web托管服务上分叉的那个。你根本控制不了这个
- 你的叉子在网络托管服务上。托管服务实际上控制这个Git存储库,但它们为您提供web页面和URL,以便将控制权委托给您
- 在您自己的计算机上复制。此克隆有一个URL,保存在名称
下,可用于控制web托管服务上的forkorigin
有序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