我最初的问题是我有一个编写各种脚本的目录。它们中的每一个都独立于其他人,通常是一个文件长。我想对它们应用一些版本控制,但我有以下问题/要求:
有可能吗?
我更喜欢在一些主流的分布式VCS中使用它(使用Mercurial的解决方案会更好,但我没有修复)。
编辑:解决方案必须是免费的(至少“像啤酒一样”)和跨平台(至少是Win32和Linux)。
答案 0 :(得分:5)
这些要求对我来说似乎很“特别”,所以这里有一个与他们相同的解决方案^^
您可以在同一目录中使用两个完全不同的VCS。甚至SVN的两个“实例”也可能有效:SVN将其元数据存储在名为.SVN
的目录中,并且(由于历史原因,关于ASP)使用_SVN
的选项。目录列表应该如下所示
.SVN // Metadata for rep1
_SVN // Metadata for rep2
script1 // in rep1
script2 // in rep2
...
当然,您需要隐藏或忽略每个VCS中的外部脚本或文件夹......
添加了: 这只占一个文件夹中的两个脚本,每个脚本需要一个额外的VCS,所以如果你甚至考虑这个路径并需要更多的存储库,重命名每个Metadir并使用脚本在更新之前将其重命名:
MOVE .SVN-script1 .SVN
svn update
MOVE .SVN .SVN-script1
答案 1 :(得分:1)
为什么不简单地为每个(一组)脚本创建一个单独的分支(在git
意义上)?
您可以根据需要单独开发它们。切换到分支将仅显示该分支的脚本。它有点像目录,但由版本控制系统管理。如果您以后想要将分支机构插入另一个存储库,则可以执行此操作,如果要将两个脚本组合到一个项目中,也可以执行此操作。将它们复制到不同的机器点可能是一个问题,但您可以克隆您感兴趣的分支,它应该适合您。
答案 2 :(得分:1)
我自己考虑的另一个主张是"Using Convert to Decompose Your Repository" article on hgtip.com。它作为“独立”解决方案失败,但作为“mv .hgN .hg
/ MOVE .SVN-script1 .SVN
”想法的补充可能会有所帮助。
答案 3 :(得分:1)
您可以为要激活的任何一个创建多个隐藏的存储库目录和符号链接.hg
。因此,如果您有两个存储库,请为它们创建目录:
.hg_production
.hg_staging
然后激活它们中的任何一个:
ln -sf .hg_production .hg
您可以轻松创建一个bash命令来执行此操作。因此,您可以编写类似activate-repo production
的内容,它会运行ln -sf .hg_production .hg
。
注意:Mac似乎不支持ln -sf
,所以您需要这样做:
rm .hg; ln -s .hg_production .hg
答案 4 :(得分:0)
我只能想到这两个轻量级版本系统:
1)将Dropbox与Pack-Rat升级一起使用,以保留自动备份的每个文件的完整版本历史记录,并且可以与多个Dropbox用户共享:https://www.dropbox.com/help/113
如果您有多台由同一用户(您)管理的计算机,则同步将是自动的。此外,如果机器在同一个局域网中,Dropbox足够聪明,可以通过本地网络同步文件,因此不必担心大文件。
2)为Mac OS X Lion使用“版本”识别文本编辑器。当Lion发布时,我希望更新TextMate,Coda和其他流行的Mac代码编辑器以支持此功能。
答案 5 :(得分:0)
UPDATE(2016):显然,一位名叫Cosmin Apreutesei的人创建了一个名为 multigit 的工具,它似乎在这个问题中实现了我所希望的!如果你读过它,非常感谢Cosmin!我今年开始使用你的工具并发现它 awesome 。
我开始考虑某种覆盖Mercurial / git / ...这会保留一对“禁用”存储库元目录,让我们说:
.hg1/
.hg2/
.hg3/
等,然后在hg commit FILENAME
上找到与.hgN
相关联的特定FILENAME
,然后暂时:
mv .hgN .hg
hg commit FILENAME
mv .hg .hgN
主要的缺点是需要花一些时间来编写工具。或者有人知道这样的现成品吗?如果你这样做,请发表全功能答案(不是评论),我非常愿意接受。
答案 6 :(得分:0)
1和2之间的折衷怎么样?你可以将它们捆绑到松散相关的组中,而不是每个脚本的文件夹+ repo,例如“数据库”,“备份”等,然后为每个组创建一个文件夹+ repo吗?然后,如果您在另一台计算机上克隆一个repo,那么您只会删除少量不相关的文件。 (带宽/驱动器空间真的是一个问题吗?)对我来说,这听起来比目前为止所有其他建议更简单。
(从技术上讲,这种方法符合您的要求,因为(1)每个脚本都不在自己的目录中,(2)并非所有脚本都在同一个存储库中,(3)您可以轻松地对任何流行的DVCS执行此操作。 :d)