2010-04-17 21 views
5

我有我的个人脚本的大量集合,我想开始使用Git进行版本控制。我曾经组织过我的代码如下:使用git组织大量个人脚本的好方法是什么?

~/code/python/projects/ (for large stuff, each project contained in an individual folder) 
~/code/python/scripts/ (single file scripts all contained in this directory) 
~/code/python/sandbox/ (my testing area) 
~/code/python/docs/ (downloaded documentation) 

~/code/java/... (as above) 

现在我要开始的版本使用Git我的代码,这样我可以有历史和备份我的所有代码到远程服务器。

我知道如果我使用SVN我只是将我的整个“~/code/”目录保存在一个大型存储库中,但我明白这不是一个用Git做事情的好方法。
我在网上看到的大多数信息都建议将所有项目文件夹保存在一个包含它自己的git存储库的项目中的单个位置(如在,没有用于python或java的单独目录),并且仅包含一个包含所有项目的“snippets”目录单一文件脚本/实验,可以在以后转换为项目。

但我不确定我是如何将所有代码目录合并到一个区域的。有没有一种好方法来保持我的单独代码目录完好无损,还是不值得付出努力?也许我只是附加到单独的代码目录,因为我从来不知道其他任何东西......

另外(作为一个附注),我想快速地能够看到所有我的时间顺序历史项目和脚本。所以我可以看到我最近创建的项目。我曾经通过在我的所有项目开头保留一个数字来做到这一点,002project003project
有没有自动或简单的方法在git中做到这一点,而不必添加一个数字到所有的项目名称?

我接受任何实际或哲学代码组织的建议,你有。谢谢!!!

回答

5

我知道如果我使用SVN,我只想让我的整个“〜/代码/”目录下的一个大仓库,但我明白个是不是用Git做事情的好方法。

的git的原因,劝阻人们不要有单一的,单片存储库是你不能克隆一个仓库的子目录(如你可以用SVN)

说你有git://blah/somecorp_code.git拥有数以百万计的修订,并为15GB 。如果你只是想要一个代码的子目录,很难 - 你要么全部15GB,要么全都没有。

对于个人代码,这确实不是一个问题 - 我有一个“单片”git存储库,大约20MB,并且我可以很高兴地将其克隆到所有希望使用它的机器上。

没有其他人使用它,没有其他人提交,我很少在分支方面做很多事情。它实际上只是用它花式撤消系统具有很好的同步和远程备份(私人GitHub的项目)

我组织,如下所示:

在库的根级别,我有一个code文件夹(用sites文件夹一起,为web开发的东西 - 这就是为什么仓库为20MB)

在代码文件夹中,我有各种语言(pythonrubyc等)

在每种语言的文件夹目录,我哈有两个文件夹,snippetsprojects。内部片段是一堆文件,内部项目是一系列文件夹。

这些项目都是随机的事情,我已经写了,但不要太多真正的工作(玩具项目,“我想如果我能......” - 项目等)

如果它是一个Python文件,它会在code/python/snippets/,如果它是一个以上的文件,它会在code/python/projects/{project name}

当我要公开发布一个项目(在Github上,通常情况下),我创建了一个新的存储库,将代码复制到这一点,并同步其Github上。

单独的“活动项目”存储库现在与单片回购无关。我研究了子模块项目,但并不打算用于这种用法 - 它旨在简化克隆依赖关系,不管理一系列不相关的存储库

我确实有一个脚本,它使用Github API自动克隆所有我在本地项目中,或使用git pull进行更新 - 它只是githubsync.py的自包含版本(我将github.py合并到同一个文件中)。它可以发现here as gist/373731

我使用githubsync.py克隆我的项目到我的笔记本电脑和桌面最初,还经常在Dropbox内运行它作为备份。

+0

哇,谢谢你的详细解释!关于以下内容的问题: “当我想公开发布一个项目(通常在Github上)时,我创建了一个新的存储库,将代码复制到此目录并与Github同步。单独的”活动项目“存储库现在与整体回购无关。“ 当你创建这个新的活动项目时,你把它放在你的个人/代码/目录之外吗?我会假设,否则你的代码库会尝试添加这个项目文件夹,当你做一些像“git commit -a”。 再次感谢! – 2010-04-24 00:50:04

+0

@spooky请注意,我在'〜/ code/mycode'和'〜/ code/{projectname}'中有个人代码回放,git没有特别有用地处理版本库中的代码库,尽管我认为git应该忽略它们,当你做'git commit -a'(不知道) – dbr 2010-04-24 02:45:59

+0

太好了,谢谢!我将采用这种方法 - 与子模块相比,它看起来更直接,更易于实施。 – 2010-04-29 10:27:19

2

我知道如果我使用SVN,我只想让我的整个“~/code/”目录下的一个大仓库,但我知道这是不是做的事情在Git的好办法。

是的。
但是,一旦你拥有了这个大型的仓库,你必须区分它将随着它们自己的生命周期和自己的标签而发展的部分。
那些将是submodules这将是,如你所说,他们自己的git回购。

所以,你仍然可以得到:

code 
    .git (main project) 
    python 
    .git (main sub-project for all python-related stuff) 
    project1 
     .git (first submodule) 
    project2 
     .git (first submodule) 
    ... 
    scripts 
     .git (one submodules for all your scripts) 
    sandbox 
     .git (sandbox submodule) 
    docs 
     .git (docs submodule) 
    java 
    .git (main sub-project for all java-related stuff) 
    ... (repeat same organization) 

注:项目创造的年代依然有较好的命名约定进行管理。

有了许多子模块,您可以:

  • 实际上克隆并没有在您的收藏中的任何一部分工作,一定能获得一切
  • 或者你可以重新修建的老组织你有首先
相关问题