Git正在忽略子目录中的.git目录。

5
我使用git作为备份工具,并将“漫游配置文件”用于我的$ HOME目录,以在笔记本电脑和台式机之间进行切换。
我的问题是,在我的$ HOME下有一个开发目录,其中包含我正在处理的多个git项目。Git不允许我添加子目录.git文件夹。因此,要提交这些项目的更改,我必须将更改推送到我的$ HOME git存储库中,在笔记本电脑上拉取(它们是在那里创建的,.git目录存在)并进行提交。
我已经了解了子模块,但这不是我想要的。我只希望像任何旧目录一样处理子级.git文件夹,以便可以移动它们并备份它们。
有人做过这个或者有什么想法吗?

4
依我之见,这可能不是完成任务的合适工具。如果您想要同步笔记本电脑和台式机,您可能想考虑使用 Unison。如果您想对 $HOME 目录下的所有工作进行版本控制,最简单的选项是定期运行 rsync 命令进行备份,但这当然不是增量备份。您需要一款增量备份产品,或者可以使用 rsync 和 git 进行编程自己实现一个。 - Igor Serebryany
@Igor:我基本上同意你的观点。不过,你不一定非得使用rsync git repos,即使你决定子模块不是正确的方法(尽管它们可能适用于此目的),你仍然可以轻松地编写脚本来批量推送/拉取/更新它们。 - Cascabel
rsnapshot可以进行增量备份。说实话,子模块是你应该使用的。我会写一个脚本来传输所有的仓库。你为什么要对git对象进行版本控制呢?只是为了方便传输吗?使用其他工具吧。此外,这不是一个SO问题,它应该在SUPERUSER上发布。为什么人们在SO上问这些非编程问题呢? - xenoterracide
4年后,我提出了一个类似的问题:http://stackoverflow.com/q/24198280/2533127。 - Brady Trainor
4个回答

2

不要这样做。这是个不好的想法,因为你正在创建一个已经有版本控制仓库的版本化备份。只需使用rsync创建备份(你仍然可以使用git对父文件夹进行版本控制)。


1

我个人使用git来同步一些点文件,如.profile或.vimrc。为了避免像你这样的问题,我的git位于$HOME/dot中,单个文件在$HOME中建立符号链接。


0

过去我使用过gibak,一个Git备份工具。除了处理文件属性外,它还可以处理您家目录中的Git仓库。

但是需要说明的是,我使用它有一段时间,但有时备份会损坏。我没有调查过这个问题,但我怀疑这与运行应用程序不断向您的家目录写入数据有关。在某些时候,哈希值不匹配,您必须采取一些聪明的方法来修复它(或开始新的备份)。

至少试试看,它可能适合您。我提到的问题也可能是由Git引起的。自从我尝试过这个工具1.5年前,它可能已经得到解决。


0

我建议使用一个脚本,首先备份您在$HOME下拥有的每个.git项目:它将生成一个备份文件(仍在您的$HOME下)
请参阅git bundle了解更多信息。

然后,您可以将这些备份(或“bundle”)文件添加/更新到您的主git存储库中(其中包含除.git项目之外的所有$HOME

最后,您可以使用相同的Git备份技术(git bundle)将所有$HOME导出为一个文件。


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