什么目录结构对DVCS有意义,比如git?

时间:2009-03-31 13:59:13

标签: git dvcs

我习惯的:

  • 服务器上的档案(NY,IN,NC)
  • 在我的开发机器上:
    • 名为〜/ work
    • 的目录
    • 名为〜/ work / NY / devproject,〜/ work / NC / project等的子目录
    • 很少,名为〜/ work / NY / release / 1.3 / project,〜/ work / NY / test / 1.3b / project等的子目录
    • 有时名为〜/ proxy / NY的目录,〜 / proxy / NC等包含档案的一次性本地缓存,以减少读取的网络流量。这些目录可以随时删除。
  • 删除〜/ work / ...并从档案中重新填充它的临时构建

但是DVCS没有意义

  • 存档位于我的开发计算机上,但由于备份原因,近端克隆位于远程计算机上。
  • 执行临时构建意味着删除并重新提取整个存档,这看起来很昂贵。
  • 看起来我的目录名为〜/ git / git.git / git,这是很多gits。

人们用〜/ git做他们所有的开发吗?如果您需要使用dev,test,release和one-off-for-big-client版本,这些是〜/ git,还是可以在他们自己的树中的其他地方?第三方组件在哪里?这对于SO来说太大了(我是否需要阅读一本书),还是可以用ASCII树图来回答?

2 个答案:

答案 0 :(得分:12)

我同意T.E.D.的答案,因为我更愿意将每个项目保留在开发目录中。但是,当我在终端查看bash列表时,我喜欢轻松看到三件事:

  1. 这是什么类型的回购--Git,Mercurial或Subversion
  2. 存储伪中央仓库的地方--- Github.com,Bitbucket.org,Google Code等。
  3. 谁拥有伪中央回购
  4. 我发现通过对我的项目使用以下命名约定,我可以很容易地做到这一点:

    ~/development/project.whatwhere.who
    

    由于在使用Mercurial克隆本地项目时很常见,因此我在目录结构中添加了一个图层:

    ~/development/project.whatwhere.who/project/   # Initial clone from remote repo
    ~/development/project.whatwhere.who/project.local.blah_descriptor/  # Local hg clone
    

    我使用的whatwhere约定如下:

    • github ---存储在github.com上的Git仓库
    • gitorious ---存储在gitorious.org上的Git仓库
    • git --- Git repo存储在其他地方
    • gitsvn ---使用存储在其他地方的git-svn克隆的Subversion repo
    • hgbit ---存储在bitbucket.org上的Mercurial仓库
    • hg.gcode ---存储在Google代码上的Mercurial repo
    • hg --- Mercurial repo存储在别处
    • svn.gcode ---存储在Google代码上的Subversion仓库
    • svn.sforge ---存储在Sourceforge.net上的Subversion仓库
    • svn.work ----存储在我们公司的svn服务器上的Subversion仓库
    • svn --- Subversion repo存储在某个地方

    who约定只是所需人员的用户名。

    以下是一些项目示例,全部位于我的~/development/目录中:

    fabric.github.bitprophet      # Bitprophet's fabric project cloned from Github
    fabric.github.myusername      # My fork of the fabric project from Github
    virtualenv.hgbit.ianb         # Ianb's virtualenv project cloned from Bitbucket
    growl.hg.gcode                # Growl project cloned from Google code
    ledgersmb.svn.sforge          # LedgerSMB project checked out from Sourceforge
    coldfire.gitsvn               # Coldfire Subversion project at work cloned using git-svn
    coldfire.svn                  # Coldfire Subversion project at work checked out with svn
    

    如果您的项目太多,为了帮助整理您的项目,您可能需要在~/development目录下方添加一个图层以供组织。例如,您可以拥有以下目录:

    ~/development/workprojects/
    ~/development/opensrcprojects/
    ~/development/personalprojects/
    

    注意:我通常使用Git进行DVCS,因此这个答案很可能倾向于这个方向。

答案 1 :(得分:8)

由于Git的工作方式,您实际上不希望将存储库(或分支)的工作目录放在目录下另一个存储库的工作目录中。它会继续想要将子目录的内容放入父存储库中。

如果你选择所有分支作为兄弟目录,那就可以了。

我倾向于做什么(无论使用Git,cvs还是(ick)SourceSafe)都有一个Development目录,每个项目,分支等都是其中的一个子目录。