赏金简短说明
是否有可移植的方式来使用具有多个检出的单个存储库?作为多个克隆的替代方案,其中有太多的开销(推/拉/同步......)以及覆盖.git/objects
硬链接的风险(甚至在Windows上都不起作用).
git很新,很想听听有经验的git用户的想法.
是否有一个概念上的原因,为什么git一次只适用于一个分支?在大多数情况下我需要同时处理至少两个不同的分支,例如构建,并行运行时,在分支之间切换前后似乎是绝对不切实际的.
好吧,也许开发人员不一定需要同时在两个分支上工作.但检查另一个分支不会自动携带忽略的东西,如构建输出文件.因此,aso需要进行新的重建
有这个脚本git-new-workdir
应该允许多个工作分支,但是对于一个,它不是git发布的一部分,虽然它已经存在了大约3年,所以我不相信它保持我的文件一致.其次,我找不到它作为Windows发行版的一部分,它是我用于开发的机器之一.
所以唯一正式的选择是为每个分支创建一个新的"克隆",这似乎是不正确的,因为每个克隆都是一个完整的存储库.我甚至不知道该怎么称为克隆目录 - 我是使用存储库名称还是分支名称或两者兼而有之?如果我在该分支上创建另一个分支,aso
实际用例更新 (@ Philip的建议)
我通常会处理两个主要/次要版本,其功能同时进行.在合并到未来的某个版本之前,还有一个偶尔的开发分支,其中包含实验功能.
在功能开发期间,通常会降低行为,并且将其与更改之前的行为进行比较会更有效.检查以前的分支/修订版是不够好的,因为很多时候它都是并行调试,这意味着需要在硬盘驱动器上同时检出这两个版本.
因此,更方便和自然的方法是保留一些所谓的"活动"分支,每个分支都在自己的目录中检查,并使用自己编译的二进制文件.这也可以节省编译时间和偶尔的本地设置(即每次结账后需要更改的配置文件,以使产品运行).
Von*_*onC 16
签出时的分支只是指向提交的指针(在提交图中).
因此,Git无法同时查看该图表的两个提交.
实际上,请参阅" 使用Git多个工作目录? ".
使用Git 2.5+(2015年第二季度),您可以为一个git 仓库拥有多个工作树git checkout --to=<path>
.
这允许您在一个单独的工作目录中签出一个分支<path>
.新的工作目录链接到当前存储库.
该链接是"可移植的"(即在Windows上工作),因为它记录在主repo $GIT_DIR/worktrees
目录中.
原始答案(2011年):
(来源:Scott Chason,ProGIT Book,http://progit.org/book/ch3-1.html,CC-BY-NC-SA )
如果您需要同时处理两个不同的分支,只需克隆您的repo并选择(git checkout
)该克隆中的另一个分支.您可以使用分支的名称作为该克隆的根目录的名称.
您可以在任何这些回购中创建分支.
所以问题是为什么Git不能有两个指针,每个目录一个? -
正如" Git/Mercurial/Bazaar的流行与推荐 "相比,Git的核心是内容管理.每次提交都代表了回购的完整快照.
您无法在同一容器(工作目录)中查看两个内容,即使您可以根据需要继续引用尽可能多的指针(分支).
您只使用一个内容填充工作目录.
如果您git clone
使用本地路径,则所有内容.git/objects
(即存储库中的大多数提交和数据)都会尽可能硬链接到旧存储库,并且不会占用任何磁盘空间.因此,如果您想要两个不同的工作目录,那么在本地克隆您的repo并不是非常昂贵.尝试从一个存储库管理两个不同的工作目录可能会有效,但这不值得.
基本上,运行git clone /path/to/old/repo new_repo
,一切都会正常工作.
如果你想这样做,
我100%建议编写一个自定义应用程序1,以一种万无一失的方式管理这个过程.
一个起点可能是
GIT_WORK_TREE=/worktrees/stable git checkout -f origin/stable
GIT_WORK_TREE=/worktrees/unstable git checkout -f origin/unstable
Run Code Online (Sandbox Code Playgroud)
等等
我会特别确保你的工作副本没有像通常的存储库那样(远程),因此普通的git命令不适用.
使用通常的git(sub)命令是灾难的秘诀,因为有一天你会遇到一个不使用GIT_DIR,GIT_WORK_TREE,GIT_INDEX的脚本(或者你想要的).
1(可能基于NGit,或者类似于Python的Git绑定,Ruby-watever在你的宇宙中是可移植的)
归档时间: |
|
查看次数: |
2219 次 |
最近记录: |