我有一个Git存储库,其中包含许多子目录.现在我发现其中一个子目录与另一个子目录无关,应该分离到一个单独的存储库.
如何在将文件的历史记录保存在子目录中的同时执行此操作?
我想我可以制作一个克隆并删除每个克隆的不需要的部分,但我想这会给我一个完整的树,当检查旧版本等.这可能是可以接受的,但我宁愿能够假装两个存储库没有共享历史记录.
为了说清楚,我有以下结构:
XYZ/
.git/
XY1/
ABC/
XY2/
Run Code Online (Sandbox Code Playgroud)
但我想这样做:
XYZ/
.git/
XY1/
XY2/
ABC/
.git/
ABC/
Run Code Online (Sandbox Code Playgroud) 使用git子模块和子树之间有什么概念上的区别?
每种情况的典型情况是什么?
我正在考虑在工作中从Subversion迁移到Git,并希望了解在Windows上设置Git的最佳方法,以及Visual Studio和Git组合可能产生的任何问题.
目前的设置是TortoiseSVN,Visual Studio 2008和AnkhSVN for .NET应用程序.替换可能是Git Extensions.
有关存储库布局的建议将特别受到赞赏.我们所有的解决方案都使用多个项目,现在我们需要在应用程序之间共享许多自定义程序集.我们的Subversion存储库的当前布局肯定不是最佳的.
更新:我现在使用Git Extensions迁移到Git,它运行得很好.共享代码和资产位于不同的存储库中,并用作子模块.当我开始时,我发现子模块有点混乱,这篇文章非常有帮助.
如何设置Git项目以包含其他项目?
例如.我正在开发一个在线地图应用程序.我们开发了一个GPS工具和SF装备.我们同时开发了一个Python Geomapping脚本以及一个不同的关注点(只关心地理映射).我们自己的核心文件将两者结合在一起,并为我们需要的应用程序构建它们.
每个项目必须独立存在 - 对GPS感兴趣的人只对GPS感兴趣 - 但包含所有其他项目的"父"项目必须作为项目可访问.
我花了一些时间试图理解子模块,但它们似乎对所需的东西有太多的独立性.
此外,如果可能的话,如果每个项目都包含一个或两个重叠的脚本,那就太好了.一个Git项目是否可以包含一个不属于其"root"的文件,这样当任何一个团队更新此文件时,两者都可以受益?
这对Git有用吗?Mercurial?主持人(GitHub,Gitorious)是否重要?
我有想法为'父'使用Subversion - 忽略.git文件夹,并使用Git作为项目(忽略.svn文件夹) - 但这只是最后的手段.
编辑:
解释为什么我不想要子模块:
子树合并(由Paul在下面介绍)不会这样做:很难从合并到的项目中更新[子树]源,并且该源必须位于"root"文件夹之外.该项目.作为一个Web应用程序,所有页面内部链接到其中的文件夹至关重要,并且测试和更新将直接在该文件夹中完成.(希望这对其他人来说是明确和有用的.)
仍在研究建立"远程分支",但其他想法仍然受欢迎.
组件驱动开发术语开始被广泛使用,尤其是 与控制反转有关.
我正在努力从SVN迁移到Git.我已经习惯git-svn将历史记录放到一个git存储库中,我已经知道如何使用git-subtree将该存储库拆分为较小的存储库.这个问题不是关于如何进行迁移,而是关于何时拆分以及何时不进行拆分.
我想拆分大型存储库,因为某些目录是自包含的库,也与其他项目共享.以前svn checkout是在库上完成的,无需签出整个项目.在所有这些过程中,我发现可能有数十个目录在自己的存储库中是有意义的,因为它们是1)独立的,2)跨项目共享.
一旦你获得了一些git存储库,使用一个工具可以更容易地处理许多存储库似乎是明智的.一些例子是谷歌的repo,git submodules,git subtree,并创建自定义脚本(看来铬做到这一点).我已经探索了这些不同的方法,并了解如何使用它们.
所以问题是关于从颠覆过渡的方向.
我是否应该尝试坚持使用一个大型git存储库,只在绝对必要时才将其拆分成更小的部分,还是应该将其拆分为数十个或可能数百个较小的存储库? 哪个更容易使用?还有其他我错过的解决方案吗?如果使用多个存储库,我应该使用哪个工具?哪些因素会让某人偏爱另一种方法呢?
注意:需要在Windows,MacOS和Linux上签出源代码.
有没有更好的建议来控制Web项目,在几个客户项目中使用git进行小的随机更新?
我想使用git进行Web项目的版本控制.与几乎所有其他提案的主要区别在于,这是一个使用HTML,JavaScript和一些PHP文件的Web项目 - 没有中央库被一个或多个程序使用,就像在典型的Linux软件包中一样.
我所有不同的Web项目都是针对不同的客户,基于相同的平台文件,我估计80%的文件是相同的(称为平台),20%是针对不同的客户进行修改以满足他们的需求.这里的问题是,我不知道我们需要客户更新哪些文件 - 详细地说每个客户都不同.
最好的方法是将平台特定文件保存在一个目录中,并将这些文件与客户特定文件重叠在另一个目录中.为了用git来解决这个问题,到目前为止我没有发现什
这里最好的方法是什么?
我们正在改变源代码控制系统,我们目前正在评估git和mercurial.总代码库大约有600万行代码,因此不是很大,也不是很小.
首先让我简单介绍一下当前存储库设计的外观.
我们有一个完整代码库的基本文件夹,在该级别下面有几个不同的上下文中使用的各种模块.例如,"dllproject1"和"dllproject2"可以看作完全独立的项目.
我们正在开发的软件是我们称之为配置器的软件,可以根据不同的客户需求进行无休止的定制.总共我们可能有50个不同的版本.但是,他们有一个共同点.它们共享一些必需的模块(mandatory_module1 ..).这些文件夹基本上包含内核/核心代码和公共语言资源等.然后,所有自定义都可以是其他模块(module1 ..)之间的任何组合.
由于我们目前正在使用cvs,因此我们在CVSROOT/modules文件中添加了别名.他们可能看起来像:
core –a mandatory_module1 mandatory_module2 mandatory_module3
project_x –a module1 module3 module5 core
Run Code Online (Sandbox Code Playgroud)
因此,如果有人决定使用project_x,他/她可以快速检查所需的模块:
base>cvs co project_x
Run Code Online (Sandbox Code Playgroud)
直观地说,将基本文件夹作为单个存储库感觉是错误的.作为程序员,您应该能够查看当前正在使用的项目所需的确切代码子集.你对此有何看法?
另一方面,将每个模块放在不同的存储库中感觉更为正确.但这使得程序员更难以检查出他们需要的模块.您应该能够通过一个命令执行此操作.所以我的问题是:在git/mercurial中是否有类似的方法来定义别名?
任何其他问题,建议和指示都非常欢迎!
PS.我已经搜索了类似的问题,但并不觉得他们中的任何一个都100%适用于我的情况.
我们正在将一个相当大的代码库从VSS迁移到Clearcase w\UCM,并且正在考虑将我们的源代码组织到一个项目中的一个或多个组件中.我们应该记住哪些最佳实践\潜在的陷阱?
源被组织成层(数据层,业务层,GUI层).团队相当小,开发人员倾向于拥有代码库的某一层,并且由于并行开发工作,我们预计会有相当多的分支.
我很想知道人们如何组织他们的代码库,特别是关于可重用组件.我在下面以OO术语进行讨论,但我对如何组织其他类型语言的库感兴趣.
例如:
等等
编辑
我不是在寻找具体的指导,我只是对人们的想法和实践感兴趣.我特别感兴趣的是在不同项目之间重用代码,而不是在单个项目中.(不幸的是,这里使用"项目"具有误导性 - 我的意思是在为客户进行的实际项目之间重用,而不是Visual Studio意义上的项目.)
好的,所以我有一个Django项目.我想知道我是否应该将每个应用程序放在自己的git存储库中,或者将整个项目放入git存储库更好,或者我是否应该为每个应用程序都有一个git repo以及git repo for该项目?
谢谢.
我已将我一直在编写的代码从单个maven项目分离到多个maven项目.我最终得到的项目可以被未来的项目使用,它们几乎都是库.到目前为止,我一直在使用单个Git存储库,因为所有内容都在一个项目中.但是在模块化之后,我想知道是否应该为每个Maven项目创建一个Git存储库.我认为这是正确的做法,但我想听听其他人对此的看法.既然项目可以作为独立组件工作,那么它们也值得拥有自己的Git存储库?另一种选择是为我目前正在处理的项目开发同一Git存储库中的所有项目.
git ×9
git-subtree ×3
.net ×1
clearcase ×1
components ×1
cvs ×1
django ×1
dvcs ×1
java ×1
java-ee ×1
maven ×1
mercurial ×1
organization ×1
paradigms ×1
project ×1
repository ×1
reusability ×1