使用git组织大量个人脚本的好方法是什么?

时间:2010-04-17 09:22:36

标签: git organization

我有大量的个人脚本,我想使用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做事的好方法。
我在网上看到的大多数信息建议将我的所有项目文件夹保存在一个地方(例如,没有python或java的单独目录),每个项目都包含它自己的git存储库,只需要一个包含所有单个的“snippets”目录 - 文件脚本/实验,可以在以后转换为项目。

但我不确定将所有代码目录合并到一个区域的感觉。是否有一种很好的方法可以保持我的单独代码目录不变,还是不值得努力?也许我只是附加到单独的代码目录,因为我从来不知道其他任何东西......

另外(作为附注),我希望能够快速查看所有项目和脚本的时间顺序历史记录。所以我可以看到我最近创建的项目。我过去通过在我的所有项目的开头保留一个数字来002project003project。 是否有自动或简单的方法在git中执行此操作而无需在所有项目名称中添加数字?

我愿意接受任何实用或哲学的代码组织你的建议。感谢!!!

2 个答案:

答案 0 :(得分:5)

  

我知道如果我使用SVN,我会将整个“〜/ code /”目录保存在一个大型存储库中,但我知道这不是用Git做事的好方法。

git阻止人们拥有单个整体存储库的原因是你无法克隆存储库的子目录(就像你可以使用SVN)

假设你有git://blah/somecorp_code.git,它有数百万次修订,并且是15GB。如果你只是想要一个代码的子目录,那就很难 - 你要么全部获得15GB,要么全无。

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

没有其他人使用它,没有其他人提交,我很少采取分支的方式。它真的只是使用它一个花哨的撤消系统与良好的同步和远程备份(私人GitHub项目)

我按如下方式组织:

在存储库的根级别,我有一个code文件夹(以及一个sites文件夹,用于web-dev的东西 - 这就是存储库为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中运行它作为备份。

答案 1 :(得分: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)

注意:使用命名约定仍可以更好地管理项目创建的时间顺序。

有了这么多的子模块,你可以:

  • 实际上克隆并处理集合的任何部分,而不必获取所有内容
  • 或者您可以重新构建您在第一时间使用的旧组织