我一直在使用Git一段时间.我一直在研究的项目在分支/标签方面并不是太复杂.
我决定在工作中使用git-svn.SVN存储库有许多不同的分支.很多这些分支机构都是客户定制的主干版本.
我经常在不同的时间为不同的客户解决问题.所以我一直在分支之间来回切换.问题是,每次我在分支之间切换时,为了测试产品,我必须重建项目.构建需要> 2小时(从头开始):(
我假设有一种方法可以将构建文件存储在分支中customer_a,然后检出customer_b,修改,构建,测试,提交.然后隐藏构建文件并customer_a再次结帐并弹出customer_a存储以返回到我所在的位置.
这仅在跟踪(即添加或提交)构建文件时有效.我不想跟踪构建文件,我绝对不想检查它们.有没有办法为非跟踪文件存储(或做类似的事情)?或者人们用来实现同类型事物的常见做法?
请注意,我们的项目构建方式每个库(其中有数千个)都会构建库文件夹本地的文件,即它们不会移动到项目根目录下的构建文件夹中.所有构建的文件遍布整个地方.
所以基于一些评论,我认为我需要举例说明我的问题
这是我的文件夹结构.
branch1/
src/
component1/
c1.c
component2/
c2.c
libsrc/
library1/
lib_1.c
library2/
lib_2.c
branch2/
src/
component1/
c1.c
component2/
c2.c
libsrc/
library1/
lib_1.c
library2/
lib_2.c
Run Code Online (Sandbox Code Playgroud)
所以问题是,branch1并且branch2具有相同的祖先,但已经分歧了很多.因此,如果我检查branch1并构建它,我将获得二进制文件(例如lib_1.o),我在其中链接Makefile以构建最终的组件二进制文件.
如果我然后checkout branch2进行更改c1.c并运行make,它会尝试链接到branch1(lib_1.o)创建的二进制文件,因为它们仍然存在于上一个分支中构建的目录中.为了避免这种情况,每次切换分支时都需要进行干净的构建(这需要几个小时).
好的
所以这个问题暂时没有答案,我只是在当地尝试不同的解决方案.
我想出的最好的就是使用pre amd post checkoout hooks.
这就是我所做的
.binaries在存储库的顶级创建一个文件夹并将其添加到该.gitignore文件中.
将二进制文件的文件格式.gitignore也添加到您的文件中.
用您喜欢的脚本语言编写脚本,找到所有格式的文件,将它们移动到.binaries/<BRANCH>/相同路径结构下的文件夹,例如src/library1/lib1.o应该MOVED到.binaries/<BRANCH>/src/library1/lib1.o- 这应该通过pre-checkout调用
编写脚本将文件从.binaries文件夹移动到当前分支,例如.binaries/<BRANCH>/src/library1/lib1.o应该移动到src/library1/lib1.o- 这应该通过post-checkout调用
现在,在分支之间切换将恢复为仅在该分支期间构建的二进制文件,并且在创建新分支时将进行干净的检出.
| 归档时间: |
|
| 查看次数: |
1594 次 |
| 最近记录: |