赏金简短描述
是否有一种可移植的方法来使用具有多个 checkout 功能的单个存储库?作为拥有的替代方案
存在太多开销(推送/pull/同步...)和覆盖 .git/objects 硬链接(hard link)(甚至在 Windows 上不起作用)的风险的多个克隆。
刚接触 git,很想听听有经验的 git 用户的想法。
为什么 git 一次只能在一个分支上工作有概念上的原因吗?在大多数时间我需要同时处理至少两个不同的分支时,在分支之间来回切换似乎是绝对不切实际的,例如 build ,并行运行a.s.o.
好吧,也许开发人员真的不需要完全同时在两个分支上工作。但是 checkout 另一个分支不会自动携带被忽略的东西,比如构建输出文件。所以需要一个新的重建a.s.o.
有一个脚本 git-new-workdir 应该允许多个工作分支,但其中一个,它不是 git 版本的一部分,尽管它已经存在了大约 3 年,所以我不相信它能让我的文件保持一致。其次,我找不到它作为 Windows 发行版的一部分,这是我用于开发的机器之一。
所以唯一的官方选择是为每个分支创建一个新的“克隆”,这似乎是不正确的,因为每个克隆都是一个成熟的存储库。我什至不知道如何称呼克隆目录——我是使用存储库名称还是分支名称,还是同时使用两者?如果我从该分支创建另一个分支,a.s.o.
实际用例更新 (@Philip 的建议)
我通常在两个主要/次要版本上工作,两个功能并行进行。还有一个偶尔的开发分支,在 merge 到某个 future 版本之前,实验性功能会进入该分支。
在功能开发过程中,行为通常会退化,将其与更改前的行为进行比较会更有效率。 checkout 以前的分支/修订版是不够的,因为很多时候它归结为并排调试,这意味着需要在硬盘驱动器上同时 checkout 两个修订版。
因此,更方便、更自然的方法是在各自的目录中保留几个所谓的“事件”分支,每个分支都有自己的编译二进制文件。这也将节省编译时间和偶尔的本地设置(即每次 checkout 后需要更改配置文件以使产品运行)。
最佳答案
checkout 时的分支只是指向提交 (within a graph of commit) 的指针。
因此,Git 无法同时检查该图的两个提交。
实际上,参见“Multiple working directories with Git?”。
使用 Git 2.5+(2015 年第 2 季度),您可以为一个 git 存储库拥有多个工作树,git checkout --to=<path> .
这允许您在 <path> 的单独工作目录中 check out 分支.一个新的工作目录链接到当前存储库。
该链接是“可移植的”(即甚至可以在 Windows 上使用),因为它记录在主存储库 $GIT_DIR/worktrees 中。目录。
原始答案(2011 年):
(来源:Scott Chason,ProGIT 图书,http://progit.org/book/ch3-1.html,CC-BY-NC-SA)
如果您需要同时在两个不同的分支上工作,只需克隆您的存储库并选择(git checkout)该克隆中的另一个分支。您可以使用分支的名称作为该克隆的根目录的名称。
您可以在任何这些存储库中创建分支。
So the question is why can't Git have TWO pointers, one for each directory? –
如“Popularity of Git/Mercurial/Bazaar vs. which to recommend”中所述,Git 的核心是内容 管理。每次提交都代表存储库的完整快照。
您不能在同一个容器(工作目录)中查看两个内容,即使您可以根据需要保留尽可能多的指针(分支)的引用。
您只用一个内容填充工作目录。
关于git - Git 的单一工作分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7331715/
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
使用Ruby1.9.2运行IDE提示说需要gemruby-debug-base19x并提供安装它。但是,在尝试安装它时会显示消息Failedtoinstallgems.Followinggemswerenotinstalled:C:/ProgramFiles(x86)/JetBrains/RubyMine3.2.4/rb/gems/ruby-debug-base19x-0.11.30.pre2.gem:Errorinstallingruby-debug-base19x-0.11.30.pre2.gem:The'linecache19'nativegemrequiresinstall
我知道全局变量$!包含最新的异常对象,但我对下面的语法感到困惑。谁能帮助我理解以下语法?rescue$! 最佳答案 此构造可防止异常停止您的程序并使堆栈跟踪冒泡。它还会将该异常作为值返回,这很有用。a=get_me_datarescue$!在此行之后,a将保存请求的数据或异常。然后您可以分析该异常并采取相应措施。defget_me_dataraise'Nodataforyou'enda=get_me_datarescue$!puts"Executioncarrieson"pa#>>Executioncarrieson#>>#更现实的
文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g
我在我正在处理的一些代码中发现了这一点。它旨在解决从磁盘读取key文件的要求。在生产环境中,key文件的内容位于环境变量中。旧代码:key=File.read('path/to/key.pem')新代码:key=File.read('|echo$KEY_VARIABLE')这是如何工作的? 最佳答案 来自IOdocs:Astringstartingwith“|”indicatesasubprocess.Theremainderofthestringfollowingthe“|”isinvokedasaprocesswithappro
我今天看到了一个ruby代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem