我是一名 Web 开发人员,我使用各种语言和项目(谁不这样做?)。我已将许多此类项目/存储库本地克隆到各个目录。
现在,多年来克隆了数十个项目,我感觉自己一团糟,因为我经常需要花一些时间来发现我克隆了一些东西的地方。
简而言之,我需要一个系统来管理本地开发存储库。目的是:
- 更好的个人组织和
- 如果我购买新机器,配置会更快
存储库主要是,但也git
有甚至是repos 。svn
cvs
有没有一个工具可以帮助我解决这个问题?我不想编写自定义解决方案(脚本)却发现我正在重新发明轮子。
配置管理工具(chef、puppet、ansible)是否适合解决这个问题?
答案1
myrepos
这里可能是合适的;它允许您管理多个不同类型的源代码存储库。您可以在单个配置文件中描述所有存储库,并根据需要同时或单独管理它们。
我认为 Chef 或 Ansible 等集中式配置管理工具不适合这里......
答案2
我将所有第三方源保留在 中/usr/local/src
,无论它们来自 tarball 还是某些第三方 SCM 主机。
(为什么在那里?因为默认安装前缀适用/usr/local
于大多数软件包,所以为什么不将源代码与二进制文件放在一起?)
因此,要设置一个新的开发机器,我只需说
$ cd /usr/local/src
$ sudo chown $USER .
$ scp -r oldbox:/usr/local/src/* .
当您有多个活动的开发框时,这确实意味着您必须不断地从上一个使用的子树开始拖拽新的子树,但我不认为这会带来很大的负担。
有时我有给定包的多个版本,例如从最后一个稳定版本 tarball 解压的源代码,加上当前的 SCM“head”签出。在这种情况下,树看起来像
$ cd /usr/local/src
$ mkdir somepkg
$ cd somepkg
$ tar xvf ~/Downloads/somepkg-*tar*
$ mv somepkg-1.2.3 1.2.3
$ git pull http://someserver.example.com/somepkg.git
$ mv somepkg head
也就是说,我有并行somepkg/1.2.3
和somepkg/head
树,因此我可以根据需要在它们之间进行切换。有时,当我出于某种原因需要使用多个稳定版本时,我最终会同时获得多个“稳定”版本。
您可能认为将所有内容存储在本地文件服务器上会很好,但这在几个层面上都会失败:
如今,大多数文件服务器都运行 SMB;您不可能总能通过 NFS 或其他符合 POSIX 标准的网络文件系统获得您想要的文件系统。这意味着权限会被搞砸,一些合法的 POSIX 文件名是不允许的,不区分大小写可能会咬你等等。
如果您习惯性地构建树内(例如
./configure && make
),您最终会得到特定于平台的二进制输出,因此每次更改框时都autom4te.cache
必须这样做。make clean && ./configure
您可以通过始终解决此问题树外构建但并不是所有的包都知道如何以这种方式构建自己。
在 NAS 上编译软件速度很慢。
在每台开发机器上保留单独的副本可以避免这些问题。您仍然需要说make clean ; ./configure
after scp
-ing 将签出树转移到新的盒子上,但是一旦这样做了,您现在只需git pull
从svn up
SCM 主机中提取最新的更改来获取更新,而不是重复scp
-ing 新树到新盒子。
为了更好地解决这个问题,有几种尝试为网络创建包管理器:鲍尔,果酱,新项目管理,努格特等等。这些的问题是您可能无法在其中任何一个中找到您想要使用的所有软件包。在可预见的未来,您将不得不管理从第三方 SCM 获取的资源。