7

我有大量的个人脚本,我想开始使用 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”目录包含所有单 -可以在以后转换为项目的文件脚本/实验。

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

另外(作为旁注),我希望能够快速查看我所有项目和脚本的按时间顺序排列的历史。所以我可以看到我最近创建了哪些项目。我曾经通过在我所有项目的开头保留一个数字来做到这一点,002project, 003project
是否有自动或简单的方法在 git 中执行此操作而无需在所有项目名称中添加数字?

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

4

2 回答 2

7

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

git 劝阻人们不要拥有单一的整体存储库的原因是您无法克隆存储库的子目录(就像您可以使用 SVN 一样)

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

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

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

我将其组织如下:

在存储库的根级别,我有一个code文件夹(连同一个sites文件夹,用于 web-dev 的东西 - 这就是存储库是 20MB 的原因)

在代码文件夹中,我有各种语言的文件夹(python,rubyc

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

这些项目是我写的随机的东西,但实际上并没有太多工作(玩具项目,“我想知道我是否可以......”-项目等)

如果是单个 Python 文件,则进入code/python/snippets/,如果是多个文件,则进入code/python/projects/{project name}

当我想公开发布一个项目(通常在 Github 上)时,我会创建一个新的存储库,将代码复制到该存储库并与 Github 同步。

单独的“活动项目”存储库现在与整体存储库无关。我查看了子模块项目,但它不适合这种用途 - 它旨在使克隆依赖项变得容易,而不是管理一系列不相关的存储库

我确实有一个脚本,它使用 Github API 在本地自动克隆我的所有项目,或者更新它们git pull——它只是 githubsync.py 的自包含版本我将 github.py 合并到同一个文件中)。可以在这里找到 gist/373731

我最初使用 githubsync.py 将我的项目克隆到我的笔记本电脑和台式机,并定期在 Dropbox 中运行它,作为备份。

于 2010-04-21T11:47:10.730 回答
2

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

是的。
但是一旦你有了这么大的存储库,你就必须区分其中的各个部分,这些部分将随着它们自己的生命周期和它们自己的标签而发展。
正如您所说,这些子模块将是它们自己的 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)

注意:项目创建的年表仍然可以通过命名约定更好地管理。

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

  • 实际上克隆并处理您收藏的任何部分,而不必得到所有东西
  • 或者你可以重建你最初拥有的旧组织
于 2010-04-17T10:05:05.920 回答