我正在努力从SVN迁移到Git.我已经习惯git-svn将历史记录放到一个git存储库中,我已经知道如何使用git-subtree将该存储库拆分为较小的存储库.这个问题不是关于如何进行迁移,而是关于何时拆分以及何时不进行拆分.
我想拆分大型存储库,因为某些目录是自包含的库,也与其他项目共享.以前svn checkout是在库上完成的,无需签出整个项目.在所有这些过程中,我发现可能有数十个目录在自己的存储库中是有意义的,因为它们是1)独立的,2)跨项目共享.
一旦你获得了一些git存储库,使用一个工具可以更容易地处理许多存储库似乎是明智的.一些例子是谷歌的repo,git submodules,git subtree,并创建自定义脚本(看来铬做到这一点).我已经探索了这些不同的方法,并了解如何使用它们.
所以问题是关于从颠覆过渡的方向.
我是否应该尝试坚持使用一个大型git存储库,只在绝对必要时才将其拆分成更小的部分,还是应该将其拆分为数十个或可能数百个较小的存储库? 哪个更容易使用?还有其他我错过的解决方案吗?如果使用多个存储库,我应该使用哪个工具?哪些因素会让某人偏爱另一种方法呢?
注意:需要在Windows,MacOS和Linux上签出源代码.
我的团队正在考虑从大约二十多个颠覆回购转变为git回购.我们试图解决的是,目前,每个人都有自己的subversion repo为他们的每个产品组件.我想做的是尽量减少我们的蔓延,并帮助建立一条明确的前进道路.
我正在寻找关于如何构建回购的建议.一个关键点是如何对相关项目进行分组.我们有两种产品.每个产品都有一组Web服务代码(php),android客户端代码(java),iphone客户端代码(obj c),ipad代码(obj c)和网站客户端代码(php + js).目前,每个所有者的组件都在一个单独的svn仓库中.
我的想法是尝试将这些组件组合成一个回购,但我不知道这是否是git的一个好习惯.这是否比单独的回购提供任何真正的好处?由于共同的可见性,这似乎可以促进更好的社会契约,以确保检查的质量,但我们是否会以其他方式为此付出代价?
我正在计划我的linux/apache/php web项目的目录结构,如下所示:
只会www.example.com/webroot/暴露在阿帕奇
www.example.com/
webroot/
index.php
comp1/
comp2/
component/
comp1/
comp1.class.php
comp1.js
comp2/
comp2.class.php
comp2.css
lib/
lib1/
lib1.class.php
Run Code Online (Sandbox Code Playgroud)
在component/和lib/目录将只在PHP路径.
为了使webroot目录中的css和js文件可见,我计划使用符号链接.
webroot/
index.php
comp1/
comp1.js (symlinked)
comp2/
comp2.css (symlinked)
Run Code Online (Sandbox Code Playgroud)
我尝试遵循以下原则:
git如何正确处理单个文件的符号链接,有什么需要考虑的吗?
说到图像,我需要链接目录,如何用git处理?
component/
comp3/
comp3.class.php
img/
img1.jpg
img2.jpg
img3.jpg
Run Code Online (Sandbox Code Playgroud)
它们应该链接在这里:
webroot/
comp3/
img/ (symlinked ?)
Run Code Online (Sandbox Code Playgroud)
如果使用符号链接有缺点,我可以直接将图像移动到webroot/tree,这将打破第三个原则(git实用性).
所以这是一个git和符号链接问题.但我有兴趣听听有关php布局的评论,也许你想使用评论功能.
我目前正在尝试将我们的版本控制切换到Git(来自CVSNT).令人惊讶的是,这不是我遇到问题的分期性或临时区域的概念.但是,我很难解决AFAICT操作(如分支,合并和标记)始终应用于存储库级别而不是文件或目录级别的问题.
我们在不同的项目中重用了很多代码.我的工作区目前看起来像这样:
/Dev
/Libs
/LibA
/LibB
/LibC
/Project1
/Project2
/Project3
/WebDev
Run Code Online (Sandbox Code Playgroud)
现在,假设Project1依赖于LibA和LibB,Project2依赖于LibB和LibC,而Project3没有lib依赖.其中一些lib后来被编译成DLL(或BPL-我们的主要开发环境是Delphi),其他只是可重用代码的集合,它们逐个文件地包含在主项目中.
WebDev包含我们(主要是静态的)公司网站的代码,该网站还包含有关Project1,2,3的信息,因此可能必须与它们一起标记.
由于我在项目之间切换很多,我通常会同时检查所有这些,在必要时将lib目录即时更新到相应的项目分支.
我将如何在Git中对此进行建模,是否有理由坚持这种工作方式?我已经阅读了关于git子模块但是到目前为止我没有看到我将如何应用这里有几个原因:
据我所知,子模块总是会在各自的"超级项目"中检出.但是,我们发现使用Delphi管理(设计时)库代码的多个副本是皇家PITA,这是我们将所有库保存在单个项目树之外的公共目录下的原因之一.其他副本只能通过构建自动化进行检查,从不进行任何实际工作.
我真的不希望libs与项目"独立":如果我标记或分支其中一个项目,我总是想标记或分支各自的库.当我想回到主项目的特定标记版本时,我希望libs也可以恢复到该状态.如果可能,标记/分支/签出应始终在项目及其依赖项的单个步骤中发生.
我已经尝试将所有内容放在一个Git存储库中,其中库代码主要在主分支上进行管理,并且每个"项目"都在自己的分支上,但每当我尝试合并主服务器和项目分支之间的lib更改时,它就会拉动来自不相关的libs的所有文件,这根本不是我想要的......
你们有什么想法如何最好地解决这一切?我对所有的建议都持开放态度,包括我工作树的新布局.
如果有人能指出我关于子模块的实际动手教程(或者我需要完成的任何其他技术),那也很棒.
git version-control git-submodules version-control-migration
现在是这样的场景:我正在开发自己的框架和客户的网站.这是结构:
.
..
_application
_framework
_public
Run Code Online (Sandbox Code Playgroud)
我想在github上使用_framework/*_public/index.php和_controllers _models和_views的结构_application(空文件夹)进行回购.另外,我想在当地有一个包含所有这些的回购.
我理解使用git-modules我可以做到这一点,但在查找了一些教程后,我仍然不明白这样做的方法.
有人可以向我解释一下吗?非常感谢!
我的问题最好用一个例子来描述.
假设我有一个项目"A".
我还有一个项目"B",它取决于"A".
另一个项目"C"也取决于"A".
我的"主要"项目取决于"B"和"C".它也可能直接取决于"A".
当"主要"=="D"时,看起来有点像"可怕的继承钻石 "
![]()
这些是我的要求:
我希望能够在"main"的解决方案中编辑项目"A","B"和"C"的内容并提交更改(即我不想只包含DLL而是代码).但由于"B"和"C"都依赖于"A",因此应该强制它们引用相同的提交.
项目"A","B"和"C"很可能也会被其他项目引用,因此我不能假设项目"main"的工作目录的所有权.
此外,应该可以将每个项目的存储库与外部存储库同步.
项目"A","B","C"和"主要"应该是
我如何设置我的存储库来完成此任务?
我正在尝试使用git设置我的(Zend Framework)开发环境(或者更重要的是我的目录结构).但是,我的基本问题实际上与所涉及的特定库无关,但更重要的是如何让git完成我想要的东西.
我打算让我的项目根目录/home/jsuggs/project.
我还将与Zend Framework(ZF),Doctrine和其他库一起工作,但我只关注ZF,因为一个解决方案可能与其他库的解决方案相同.
我将克隆ZF2存储库/home/jsuggs/zf2.
我想/home/jsuggs/project/application/library/Zend参考一下/home/jsuggs/zf2/library/Zend.
我希望能够在两个存储库(项目和zf2)上本地工作,其中zf2中的切换分支直接影响项目.
我的问题是我如何设置Git,以便深层嵌套的库可以在开发期间引用我的本地版本,但也可以在部署到生产中时设置为(其他/任意)位置?
我还想避免路径是绝对的,所以如果其他人在项目上工作,那么库路径将不会引用我的主目录.
我正在研究使用符号链接和git子模块,但想知道这种类型的设置是否有"最佳实践".而且,我完全有可能做错了所以请随意说"只做X".