我刚开始使用git并开始与其他开发人员在相同的代码上进行协作.我之前曾与SVN合作过一段时间,但从未与我的代码库上的其他人合作过.现在,由于合作者使用相同的代码,我需要一个高效的工作流程.在寻找这样的时候,我发现了这一点,这对我们的要求来说似乎是一个很好的工作流程.
我的存储库位于本地计算机中.我创建了存储库git init --bare.我添加了初始代码来掌握并推送它.然后我添加了一个"开发"分支使用git branch develop; git push -u origin develop.
现在我想从"开发"创建功能分支,我希望所有协作者都可以访问这些功能分支.我希望有一个嵌套的结构,像这样
origin/master
origin/develop
origin/develop/newFeature
origin/develop/anotherFeature
etc.
Run Code Online (Sandbox Code Playgroud)
因此,当合作者输入时,git branch -a他/她将立即知道"newFeature"处于"开发"行,并决定该怎么做.
经过一些试验和错误,这就是我所做的:
git clone file:///path/to/repo --branch develop
git checkout -b newFeature develop
EDIT some files
git add .
git commit
git push origin newFeature
Run Code Online (Sandbox Code Playgroud)
现在这个"newFeature"可供所有协作者克隆.git branch -a给我
develop
* newFeature
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
remotes/origin/newFeature
Run Code Online (Sandbox Code Playgroud)
那么"newFeature"真的是"开发"分支的一部分吗?或者它现在是分支?一旦我克隆了"newFeature",我该如何检查它是否是开发线?这可能会让人感到困惑,因为我可能会在适当的时候在master中找到一个名为"newFeature"的分支!
我对git如何工作的理解肯定是不够的.因此,如果有人能指出我正确的方向,那将是伟大的!
TIA,
tor*_*rek 20
TL; DR版本:刚刚git checkout -b develop/feature开始(你需要没有develop为此命名的分支才能工作!).
由于一个非常简单的原因,分支机构并没有真正"嵌套":分支名称(例如newFeature)仅代表某些提交ID,即某些提交的某些SHA-1"真实名称".
(在这方面,分支名称与标记相同,如"v2.3".)
使(本地)分支名称特殊的东西 - 使它们与任何其他引用不同的是 - "git checkout"将通过在git的HEAD文件中写入分支的名称来获得"在分支上" ,并且,一旦你已经这样做了,新的提交将自动更新分支名称,以便它指向您刚刚进行的新提交.
(远程分支名称不能以这种方式"开启",但也会根据需要更改其目标SHA-1.我之所以提到这一点,只是因为下一段提到"远程分支"或"远程跟踪分支",你们我会在git branch -r输出中看到.)
但是,分支名称按以下方式排序git branch --list(按"种类" 排序后,即首先将所有本地分支分组在一起,然后分组所有远程分支).这意味着您可以将名称组合在一起:只需创建名称develop/anotherFeature和develop/newFeature原始名称.在这种情况下,斜杠只是名称的一部分.
这里的问题是git最初通过将它们放在包含文件的目录中来实现1个这些分支名称.在支持git的系统上,您不能拥有一个名为的目录develop 和一个develop同时命名的文件.2 因此,如果你有一个名为的分支develop,git可能已经创建了一个文件(.git/refs/heads/develop具体而言),然后阻止它创建一个.git/refs/heads/develop包含文件(newFeature)的目录(包含分支当前识别的提交的SHA-1) .
1虽然git现在也使用平面文件(.git/packed-refs)来存储分支到SHA-1映射,但它仍然使用文件目录,并且必须确保不创建必须同时充当目录和文件的名称.
2我个人认为文件系统名称实体同时作为目录和文件工作是有意义的:这将是一种方法,例如,将可执行文件的所有ELF部分存储为可执行程序目录中的文件,或者处理MacOS为app bundle做的事情.但这违反了POSIX必须工作方式的各种规则,因此需要重新设计文件系统名称空间,并且更适合作为Plan 9的后续工作(例如)而不是Unix-ish变种.
| 归档时间: |
|
| 查看次数: |
5937 次 |
| 最近记录: |