【发布时间】:2013-12-30 02:57:39
【问题描述】:
在我的开发计算机上,我以前只是将 git 用作自动备份/恢复系统。我知道这不是 git 的用途,但它对我来说非常有效。我有一个每 5 分钟运行一次的简单脚本(类似于 Windows 任务计划程序)并检查是否有任何文件已更改。如果是这样,它会创建一个新的提交(带有“自动提交”消息)并将其推送到我在外部硬盘驱动器上的镜像。我也可以扩展它以推送到其他位置的镜像。
我不想停止这样做,因为系统不止一次救了我的命。在电源故障、意外文件删除或客户突然决定他们喜欢 2 个月前的项目外观并希望恢复所有更改之间 - 将所有内容回滚到任何时间点的能力非常宝贵。
现在,当我想将其中一个存储库放在 github 上进行协作时,问题就来了。每次我推送到 github 时,它都会创建数十个或数百个或提交,通常代码不完整,因为我在五分钟左右的时候正在修改文件。
我希望有第二个存储库位于同一目录中并监视相同的文件,但是我希望它只手动提交。这样,当我推送到 github 时,只有有意义的提交,并且我所有的自动备份都不会被窥探。
这可能吗?
快速编辑 -
四处搜索,git rebase 命令有用吗?似乎它可能会破坏所有自动提交,这并不是理想的行为。
长篇编辑 -
这个小项目一直是噩梦。
按照@janos 的建议,我在每个文件夹中设置了第二个存储库。为了设置这些,我只是在当前存储库上使用了git clone。我修改了我的 autosave.bat 文件以使用 GIT_DIR 和 GIT_WORK_TREE 并认为一切都会很花哨......它不是
首先,在 Windows 7 PC 上尝试以下操作:
test.bat
--------
CD C:\SomeFolder
FOR /D %%i in (*) DO (
CD %%i
set GIT_WORK_TREE=%cd%
echo %GIT_WORK_TREE%
CD ..
)
这样的结果应该很明显了吧?我们遍历SomeFolder中的每个子目录,将其设置为当前GIT_WORK_TREE,然后输出GIT_WORK_TREE。输出:
C:\SomeFolder
C:\SomeFolder
C:\SomeFolder
C:\SomeFolder
....
看起来批处理脚本是乱序执行的(set GIT_WORK_TREE=%cd% 在CD %%i 完成之前处理)。当每个项目都在其他项目的存储库中时,您只能想象这对我的备份造成的恐惧。
我尝试使用 git --git-dir=backup.git --work-tree=%cd% 来解决这个问题,只是在文件夹名称中有空格时出现错误(我必须将 %cd% 放在引号中)
我终于得到了它的工作,backup.git 未被识别为 git 目录并被添加到存储库中!为了安全起见,我将以下内容添加到我的 .gitignore 中:
# git is really making me angry today
/.git/
/backup.git/
我认为它终于可以工作了,但我不寒而栗地测试我的远程备份,看看它们是否真的设置正确。
【问题讨论】:
-
这是一个关于它的 SO 问题:stackoverflow.com/questions/2519446/…
-
@lincb:这个问题并没有完全解决我自己的问题。他们的问题是文件权限之一。给定一个目录有 4 个文件,他们希望其中 2 个文件在一个 repo 中,2 个文件在另一个 repo 中。我想要两个 repos 中的所有 4 个文件,但希望一个 repo 有 300 次提交,而另一个 repo 有一个包含所有更改的大规模提交。
-
哦,对不起。我会寻找别的东西。
标签: git github backup project-management