问题 在git和化石之间犹豫不决


新手到Fossil(或任何其他版本控制系统)在这里。之前使用过专有的,但从未自己设置过。

目前,我希望设置一个,以便我和我的朋友可以将它用于项目。

我选择Fossil主要是因为分布似乎是要走的路,看起来很轻巧,并且有一个包含的bugtracker。但是对于很多人来说,Git似乎是受欢迎的SCM。是否值得增加复杂性来支持Git + someBugTracker而不是Fossil?还有更好的选择吗?我将不得不从0开始。


7862
2018-04-02 12:45


起源



答案:


只是一些想法,没有组织。

如果你的朋友已经习惯了git,Git是一个优秀而强大的分布式SCM,提供很棒的托管服务,比如Github或Gitorious。

虽然,Git的概念并不容易理解。 Fossil有类似的概念,但可能更容易入手(没有暂存区域,没有索引的概念,自上次提交后恢复更改) revert 不 reset 要么 checkout等)。没有太多的子命令有多种选项,帮助简洁明了。如果你害怕你可能会迷路,那就选择化石。当然,这也意味着使用化石你不能做与git一样多的事情(例如,没有变基,至少目前不是)。

对于化石,有 很少有托管在线服务。与Git一样容易设置服务器来运行Fossil。

此外,使用Fossil,项目的历史记录存储在一个文件中,因此我发现备份所有项目非常容易:将所有存储库放在同一个文件夹中,然后进行单个rsync任务。然而这样做 增加的 备份完全没用。

与...同时 git在不同文件夹中的相同项目上的两个分支上工作将意味着具有两个不同的整个项目历史和分支的副本 .git/objects 可能冗余且庞大的目录,Fossil的默认工作方案必须有一个单独的存储库,以及一个或多个连接到它的工作目录。也许如果磁盘使用很重要,这很重要。

警告,Fossil bug跟踪器(行话中的票务系统)和wiki相当简陋(尽管它们运行良好)。


14
2018-04-02 18:42



默认情况下,同一分区上的Git克隆将创建硬链接。因此,您需要的唯一空间是工作树 - knittl
@Benoit,请注意 rsync-ing Fossil repos是一种有点天真的方法,因为它不需要在备份时对该数据库文件进行写入活动。进行“在线”备份的唯一可靠方法是使用 sqlite3 dump ... 然后备份转储文件。并且Git并不是那么难以备份:你只需要使用Git来完成这项任务。此外,如果需要一个高调的解决方案,gitolite v3在推送时实现主/从复制。 - kostix
@kostix:由于多种原因,人们喜欢按位备份。虽然我没有看到任何合理的理由来备份化石储存库而不进行sqlite3转储,但是有些人会不愿意这样做。此外,化石有复制,但不会复制一些数据(通常是数据 fossil scrub将删除)。如果不需要备份该数据,则只需利用复制就足以进行备份。 - Benoit
您可以使用 git bundle 创建备份。请参考这个问题(和答案): stackoverflow.com/a/11163038/1047741 - shytikov
@bug:两个开发人员在一台机器(例如构建服务器)上工作,每个机器都需要在其主目录中进行独立检查。签到去了 repo.fossil 他们已经签出的文件。比较Git,即使它们在同一个盒子上,他们也必须相互推动更改。 - Warren Young


答案:


只是一些想法,没有组织。

如果你的朋友已经习惯了git,Git是一个优秀而强大的分布式SCM,提供很棒的托管服务,比如Github或Gitorious。

虽然,Git的概念并不容易理解。 Fossil有类似的概念,但可能更容易入手(没有暂存区域,没有索引的概念,自上次提交后恢复更改) revert 不 reset 要么 checkout等)。没有太多的子命令有多种选项,帮助简洁明了。如果你害怕你可能会迷路,那就选择化石。当然,这也意味着使用化石你不能做与git一样多的事情(例如,没有变基,至少目前不是)。

对于化石,有 很少有托管在线服务。与Git一样容易设置服务器来运行Fossil。

此外,使用Fossil,项目的历史记录存储在一个文件中,因此我发现备份所有项目非常容易:将所有存储库放在同一个文件夹中,然后进行单个rsync任务。然而这样做 增加的 备份完全没用。

与...同时 git在不同文件夹中的相同项目上的两个分支上工作将意味着具有两个不同的整个项目历史和分支的副本 .git/objects 可能冗余且庞大的目录,Fossil的默认工作方案必须有一个单独的存储库,以及一个或多个连接到它的工作目录。也许如果磁盘使用很重要,这很重要。

警告,Fossil bug跟踪器(行话中的票务系统)和wiki相当简陋(尽管它们运行良好)。


14
2018-04-02 18:42



默认情况下,同一分区上的Git克隆将创建硬链接。因此,您需要的唯一空间是工作树 - knittl
@Benoit,请注意 rsync-ing Fossil repos是一种有点天真的方法,因为它不需要在备份时对该数据库文件进行写入活动。进行“在线”备份的唯一可靠方法是使用 sqlite3 dump ... 然后备份转储文件。并且Git并不是那么难以备份:你只需要使用Git来完成这项任务。此外,如果需要一个高调的解决方案,gitolite v3在推送时实现主/从复制。 - kostix
@kostix:由于多种原因,人们喜欢按位备份。虽然我没有看到任何合理的理由来备份化石储存库而不进行sqlite3转储,但是有些人会不愿意这样做。此外,化石有复制,但不会复制一些数据(通常是数据 fossil scrub将删除)。如果不需要备份该数据,则只需利用复制就足以进行备份。 - Benoit
您可以使用 git bundle 创建备份。请参考这个问题(和答案): stackoverflow.com/a/11163038/1047741 - shytikov
@bug:两个开发人员在一台机器(例如构建服务器)上工作,每个机器都需要在其主目录中进行独立检查。签到去了 repo.fossil 他们已经签出的文件。比较Git,即使它们在同一个盒子上,他们也必须相互推动更改。 - Warren Young