你如何组织你的代码工作区和主文件夹?

22
你如何为个人代码项目在家目录中组织工作空间?你如何保持工作空间高效处理多个项目?
重点问题已经在上面提出,如果你只想回答这个问题,那么下面的内容可以不用阅读。以下是与工作空间组织有关的各种相关问题,不必回答所有问题。如果您对以下部分问题的回答感兴趣,我们非常乐意听到您的意见。
此问题主要在UNIX和OS X系统环境下。Windows用户可以提出建议,但我更关心UNIX中通常发现的家目录和命令行约定(除非您使用cygwin)。
当同时维护多个代码项目时,您会发现什么样的文件夹结构最有用?在下载各种开源代码项目时,如何保持所有各种源文件树的组织井然,而不会在工作空间中弄得一团糟?
我特别想知道,有哪些技巧或提示可以使项目易于通过命令行访问,且在需要专注于特定项目时易于浏览并迅速离开。
您是否发现有用的惯例可帮助您保持各种源存储库的有序性?特别是在使用Git时,您如何组织不同的分支和相关存储库?您通常会丢弃工作副本并从源代码控制中完全刷新吗?您保留什么内容以及为什么?如果特定项目具有许多路径依赖项,您如何处理名称空间和路径,并将其映射到您自己的家目录结构中?
那么关于bin文件夹和公共库呢?如果您需要为各种项目创建许多潜在的开发环境(可能是不同版本的PHP、Ruby、Perl、Web服务器、编译器等),您如何管理此问题?
对于经验丰富的系统管理员而言,从经验中得到了哪些有效的解决方案,哪些方案行不通?
您如何尽可能地保持简单,但又不会过于简单?
什么可以给您最大的灵活性,以便同时处理多个项目?
您是否经常将项目移出您的工作空间并从源代码控制重新导入?如何防止堆积垃圾同时减少重建项目环境的需求?

如何清理或清空整个工作空间,以便从一个干净的状态开始,而不会失去访问过去项目中获得的有价值的源代码和组织效率?


1
你写的几乎每个句子都以问号结尾。我建议你将帖子压缩成一个可管理的问题 :) - Noon Silk
2
这篇文章可能是社区维基的一个好候选者。 - Amber
聊天室里的问题是“你用过Git吗?”答案是否定的,所以如果像我一样,你认为“清除构建树会摧毁你的存储库吗?”那就是原因。只是想为他澄清一下。 - jcolebrand
4个回答

13

我会把我自己编写的软件放在一个特殊的目录中,以我的主要网站命名 - 为了方便起见,我们将其称为“juggle”。我会在~/juggle/software/下面创建每个项目的子目录(通常使用git进行管理),并在~/juggle/websites/下创建一个子目录来存放每个网站域名,无论是原始HTML还是像webgen或staticmatic这样的东西。

为了帮助我在它们之间切换,我使用'apparix',它与bash非常好地结合在一起。

$ cd ~/juggle/software/wolfsbaen
$ bm # bookmarks this with apparix

所以现在我可以从任何地方做到这一点

$ to wolfsbaen

我下载的软件都存放在~/software/目录下:

  • archives - 存放已下载的源码压缩包
  • documentation - 存放已下载的HTML文档和PDF书籍
  • hack - 用于试验新的想法或软件库的临时项目
  • projects - 用于与他人合作但不是由我本人发起的项目
  • simple - 用于放置可以在其解压目录中运行的bash/python/ruby程序
  • subversions - 存放所有版本控制工具的检出内容:cvs、svn、git、hg等
  • unpacked - 存放编译之前的已解压tarball文件

此外,我还有一个~/bin目录,用于存放我编写并经常使用的有用脚本。我将其添加到PATH环境变量中,以便能够随时调用。

至于其余问题,我认为并不适用于我;除了对于Git,我几乎从不需要清空我的工作区。当我需要切换分支时,我会在当前工作目录下创建新的分支,并暂存最近的更改。我也会保留自己所有软件和网站源代码的裸仓库副本:

$ git clone --bare . /srv/git/wolfsbaen.git

每个工作阶段结束时,我会 'git push' 到这里。这使得/srv/git成为备份的明显选择。


谢谢 Cathal。我正在学习 git。你在这里的工作流对我来说非常有意义。还有感谢你给出的 "apparix" 提示。我一直在想如何在命令行中做书签。这回答了我一直以来想问我的系统管理员朋友的问题。 - Gordon Potter
Cathal,我在OS X上安装Apparix遇到了麻烦。通过谷歌搜索,我找到了你的答案。你能否写一个快速指南? - Jonathan Dumaine

3

我将为您翻译IT技术相关内容。以下是需要翻译的内容:

我不会回答你所有的问题;但是我会说,我使用SVN,并遵循他们的项目规范。所以我有一个名为:

d:\development

在其中,所有我的项目都作为子文件夹(可能有20个左右)。在每个子文件夹中,都有

\trunk
\branches
\tags

就是这样。我在家里有第二台机器,它是我的服务器(也是媒体中心:P),在上面我运行了Apache下的SVN,还有Trac来管理每一个任务和bug。此外,我还有CC.net用于构建。


3

你是如何组织个人代码项目的工作空间的?

就UNIX相关的东西而言,我会将项目文件夹放在~/dev下。通常情况下,我会从Subversion上检出一些内容到这些项目文件夹中。

什么最让你能够同时处理多个项目呢?

对于Web项目来说,维护一组Apache 基于名称的虚拟主机非常方便同时处理多个项目。例如:http://foo.localhost/指向~/dev/foo/public,http://bar.localhost/指向~/dev/bar/public等等。

GNU Screen 对于我的本地开发流程也非常关键。如果我需要转换到另一个项目,我只需按Ctrl-a,c,就会有一个新的隔离终端可供使用。


我主要在OS X上使用MAMP。但是你关于命名虚拟主机的提示非常有道理。 - Gordon Potter

1
我想分享一下自己在组织系统方面的经验(尽管问题很老,但我希望这可能对某些人有所帮助,或者我可以得到更好的建议)。
我不断更改Linux发行版,有时会使用Windows进行工作。因此,我将硬盘分区为4个驱动器。
  1. Windows
  2. Linux
  3. 主要
  4. 额外的一个

请注意,需要保留HTML标签。


我所有的工作都放在第三个驱动器上,它是NTFS格式的,因此可以在Windows和Linux中访问。(当在Linux中挂载此驱动器时,您可能需要进行一些 fstab 配置以避免文件权限混乱)。现在,在这个驱动器中,我放置了以下文件夹。

  • 文档
    • 我存储的所有文档(例如书籍、白皮书等)
  • 图片
  • 音乐
    • 歌曲
    • 播放列表(目前使用banshee)
  • 电影
  • 工作
    • 办公室
      • 办公室项目1
      • 办公室项目2
    • 个人
      • 公共的(主要是我在github上发布的项目)
        • 个人项目1
        • 个人项目2
      • 私人的
        • 个人项目3
        • 个人项目4
    • 资源
      • 大多数从github或其他源代码或相关材料下载的存储库
  • 草稿
    • 基本上所有东西都会先放在这里,以防我不知道该放在哪里或者我很匆忙。稍后根据需要对它们进行分类
    • 我还在这个目录中设置软链接到其他经常访问的目录。原因是我将草稿文件夹设置为桌面
  • 垃圾箱
    • 已经处理过但需要保留一段时间的东西
    • 我在闲暇时间清理这个文件夹
  • Dropbox
    • 存储在多台设备上访问的少量东西存储在Dropbox中。但由于Dropbox的隐私问题,我无法将所有东西都存储在其中。我仍在寻找理想的解决方案。我尝试在自己的服务器上运行开源的Dropbox替代品,但维护它们很麻烦。(由于我来自第三世界国家,经常要离线)
    • 目前我正在推出一个简单的Web应用程序,用于存储我喜欢的引用/书籍之类的东西。当我工作时,我会做很多笔记。目前我将它们存储在Dropbox中,但很快我将把它们移动到我的应用程序中。
当我安装新操作系统时,首先我会更改默认文件夹和书签位置,例如桌面、音乐、文档等,以便它们指向主驱动器文件夹,并设置 Dropbox。我将临时文件夹设置为桌面。
对于配置文件(编辑器/ shell 等),您可以使用主驱动器/ Dropbox/ dotfiles。
此外,作为附注,我使用 zsh/vim/emacs 与一些有趣的插件来提高我的生产力。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接