2009-06-09 74 views

回答

4

这真的取决于这些可重用的应用程序是否真的要在项目之外重用?

您可能需要它在不同的回购中的唯一原因是其他具有独立回购的项目可能需要使用它。但是你可以随时将它分开。制作一个git仓库是很便宜的,所以如果有必要的话,你可以稍后再做。让事情变得复杂起来只会让你后来感到沮丧,所以随时可以等到你知道这是必要的

YAGNI它不仅仅是代码。

2

我不是git专家,但我不相信合适的策略与hg,甚至在这种情况下,svn是不同的,所以我会给我2美分的价值无论如何;-)。

每个应用的回购只有在大量的人有兴趣提取(或观看更改)单独的应用时才有意义;这在理论上可能是这种情况,但我从未在现实生活中观察过它 - 大多数情况下,对这个项目感兴趣的人都对它感兴趣。因此,我会避免并发症,并将整个项目整合到一个回购项目中。

+0

亚历克斯,我问的原因是,Django似乎强调可重用应用程序的概念。我对你的陈述很感兴趣,“理论上这可能是这样,但我从来没有在现实生活中观察过它。”你会说在Django中可重用应用程序的想法更像是一种“理论上很好”的事物吗? – rick 2009-06-09 02:20:17

+0

@rick,或者你说得对,那只是“理论上很好”,或者我根本没有足够的现实生活中的Django经验 - 毕竟,对我而言,Django只是其中的很多人(很好,很感谢!)箭头在我的颤抖中,而不是我开发应用程序的唯一方式! - ) – 2009-06-09 05:24:26

2

无论您拥有多少产品,每个开发团队几乎总是​​可以更容易地拥有一个存储库。最终你会希望在项目之间共享代码(甚至是几个独立的DJango网站!),并且只需要一个存储库就容易得多。

通过一切手段设置一个很好的文件夹结构内存储库。然而,从git(可能来自子文件夹)的单个checkout应该为您提供测试网站所需的所有文件(python,templates,css,jpegs ...),然后您只需将httpd.conf等复制到完成安装。

1

这些单独的应用程序是否利用共享代码和库?如果是这样,他们真的属于同一个存储库..这使您能够在运行单个测试套件时看到新更改的影响。

如果他们是完全独立的和不可知的,那真的没关系。为了理智,易于构建和便于包装,我倾向于将整个项目保存在一个联合存储库中。但是,我们通常在非常小的团队中工作。因此,如果不涉及共享代码,那么对于所有相关方而言,其实际上只是一个哪种方法最方便和最高效的问题。

4

我喜欢Tom'sAlex's答案,但他们缺乏他们背后真正理由
(“更容易让每个开发团队一个仓库”?
“大量人员可能会感兴趣的拉出(或看变化)不同的应用程式”
为什么?)

首先,一个或多个仓库是一个服务器端管理决定(在服务器资源的术语)。
SVN很容易在一个服务器上建立多个存储库,而ClearCase每个VOB都会有自己的“vob_server”进程,这意味着:你不需要每个(Unix)服务器有超过一百个VOB(或超过20-30在Windows服务器上)。
Git是特别的:设置一个仓库很便宜,访问它可以很容易(通过一个简单的共享路径),或可以涉及一个进程(一个git守护进程)。最新的解决方案意味着:“从外部直接访问直接从访问的库不多”。 (它们可以通过由超项目引用的子模块间接访问)

然后是客户端管理:多么复杂将工作区的结构是,当一个或多个仓库中涉及。客户如何参考配置? (引用正确文件所需的标签列表)。
SVN会使用外部的git“submodules”,并且在这两种情况下,都会增加复杂性。
这就是为什么Tom's answer可以是正确的。

最后,有configuration management aspect(在Alex's answer中引用)。你能不能标记部分回购
如果你能(像SVN,你居然做出回购的一部分SVN副本),这意味着你可以有一个组件方法,其中文件的几组有自己的生命周期,以及他们自己的标签(按照自己的个人节奏)。
然而在Git中,这是不可能的:一个标签引用提交它总是涉及所有库。
这意味着一个“基于系统”的方法,在那里你只想要所有的项目(而不是“看着单独的应用程序 - 我从来没有在现实生活中观察它”从Alex's answer位)。如果是这种情况(如果你想要所有的系统),那并不重要。

但是对于我们这些认为是“独立文件组”的人来说,这意味着一个git存储库实际上代表了一组文件(在进化和标记方面有自己的节奏),可能还有一个超级-project将这些存储库作为子模块引用。
这不是你日常的设置,因此对于独立项目,我会建议只有很少或一个混帐回购协议。
但是对于更复杂的相互依赖的项目集...您需要意识到,通过Git构思的方式,“存储库”代表了一组连贯的文件,应该以与all相同的速度进化。而不是“所有”,总是可以见缝插针在一组文件(如“所有”是够复杂的)。因此,多个仓库就在这种情况下是必需的。
而且一系列复杂的相互依赖的项目也会在现实生活中发生;)

1

如果您有可重复使用的应用程序,请将它们放在单独的回购站中。

如果你担心私有仓库的数量看看到位桶(如果你决定让他们开源的,我建议github上)

有包括到自己的应用中的一个很好的方式项目,甚至使用版本标签:

我最近找到了一种方法来做到这一点与构建和git标签 (我用svn:外部包括一个应用程序,但最近从svn切换到git)。

我第一次尝试mr.developer,但在没有得到这个工作,我发现mr.developer替代:

我发现gp.vcsdevlop是非常容易使用这个目的。

看到https://pypi.python.org/pypi/gp.vcsdevelop

我结束了,把这个在我的扩建文件,并得到了它在一次工作(我有一个点子requirements.txt添加到我的应用程序得到它的工作,但之后是一件好事所有):

vcs-update = True 
extensions = 
    gp.vcsdevelop 
    buildout-versions 
develop-dir=./local_checkouts 

[email protected]:<my bitbucket username>/<the app I want to include>[email protected]#egg=<the appname in django> 

develop = . 
在这种情况下

它chacks了我的应用程序,并在subdit项目将其克隆到版本标签0.1.38 ./local_checkouts/ 和发展它运行斌/扩建

编辑:备注2013年8月26日

虽然使用此解决方案和编辑在一个项目中使用的应用程序的该地方结帐。我发现这一点:

尝试正常“git push origin master”命令时,你会得到这样的警告:

To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes before pushing again. See the 'Note about 
fast-forwards' section of 'git push --help' for details. 

编辑2013年8月28日

关于在local_checkouts工作由包括共享应用程序gp.vcsdevelop:

(并处理上述remakr中讨论的警告)

混帐推起源+主似乎搞砸了提交历史的共享代码

所以在local_checkout目录的工作方式是这样的:

去到当地结账(一斌/扩建后所以结帐是主):

cd localcheckouts/<shared appname> 

像这样创建一个新的分支,开关等它:

使用git checkout -b 'issue_nr1'(如分支的名称你工作)

问题后,这里命名和你做这个领域的工作,使用后(在usuals混帐后添加和git的承诺)

git push origin issue_nr1 

时测试完成合并分支回到主:

第一结账主:

git checkout master 

更新(大概只有neede时的平均时间等提交)

git pull 

和合并到主(您身在何处,现在):

git merge issue_nr1 

和finaly推动本次合并:

git push origin master 

(与sepcial感谢这个简易导向,以git:http://rogerdudler.github.io/git-guide/) 并过了一段时间,要清理分支,您可能需要删除此分支

git branch -d issue_nr1 
相关问题