因为这是用git标签的,所以我希望我对SVN的了解可以忽略不计。
目前,我正在克隆一个仓库,并使用gitk克隆一个特定的分支。
您正在克隆整个远程存储库,而不仅仅是一个特定的分支。
最好将存储库想象成一个数据库,因此您正在克隆远程数据库的当前状态。但是在那之后,您将在自己的数据库副本上工作。如果提交,则更改本地数据库。
该fetch
命令用于使本地数据库与远程数据库保持同步。
通常从该本地数据库中,签出要处理的分支。这与git的内部标记不同,它是您当前的工作开始的地方。
假设您正在开发一个简单的存储库,除了之外没有分支master
,您可以查看一下.git
文件夹以显示“魔术”:
假设您的上一次提交master
是182e8220b404437b9e43eb78149d31af79040c66
,您将在下找到确切的内容cat .git/refs/heads/master
。
从该分支分支到新分支git checkout -b mybranch
,您将在文件中找到完全相同的指针cat .git/refs/heads/mybranch
。
分支不过是“指针”。“工作”标记称为HEAD
。
如果您想知道自己HEAD
的位置:
cat .git/HEAD
上面写着例如ref: refs/heads/mybranch
,这反过来将(cat .git/refs/heads/mybranch
)指向提交哈希78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
实际的提交存储在objects
文件夹下(其主题如何)。
项目文件夹仅包含该分支的内容,而我看不到SVN中的所有分支,这对我来说有点困惑。
请勿将其working directory
与整个“ git-database” 混淆。如上所述,您的工作目录只是(可能是)子集的快照。
假设您有不同的分支,则您的工作目录专用于仅在该分支上工作(尽管您可以将工作从那里放在其他地方)。
通常,如果要查看为项目定义了哪些分支,则可以
git branch
对于当地分支机构
git branch --remote
用于远程分支
git branch -a
对彼此而言
(或git branch -v
)
由于git是一个分布式版本控制系统,因此不仅可以而且可以在本地/远程创建不同的分支。
我典型的工作流程是:
- 分支功能分支
- 从那分支一个WIP(进行中的)分支
- 就像您想要的那样工作-即使您在一行之后提交;没关系
功能完成后:
- 压扁/重做
WIP
分支(具有交互式重定基)=从中进行单个提交
- 将
WIP
分支合并到功能分支中,并提供(如果您使用github,该提议将被称为“拉取请求”)以集成到稳定(主)分支中。
另外,我想知道如何处理需要同时在两个分支上进行wprl的进程,以防万一,例如,我需要在master上进行修补,但还要保留另一个分支的内容。
这取决于项目的结构:
假设您有一个稳定的主人。而且功能仅是从该稳定分支中开发的,因此它通常位于功能分支的后面。然后,您将对master进行最后一次提交,这将是功能分支的根。
然后,您将在master分支上进行提交,并可以决定是将两个分支合并在一起还是将其变基(对于有高级需求的用户来说,这是一种合并)。
或者,您始终可以在分支上进行更改(例如master
),然后将其选择到其他分支上。
建议使用什么名称约定来制作包含从GIT仓库中克隆的分支的文件夹,例如myproject-branchname
它是由你决定。
通常,您以存储库名称结尾。
但是在某些情况下,不需要这样做:
例如,您克隆oh-my-zsh,其中git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
Here .oh-my-zsh
被明确命名为目标。