【发布时间】:2014-10-14 14:24:37
【问题描述】:
我意识到已经存在关于如何备份存储库的问题(答案通常是 git bundle),但我会针对特定设置。
我试图定期将当前分支的“快照”提交到另一个分支以进行备份。我正在使用一个批处理文件,它看起来像这样(我尝试了比我在这里列出的更多的变体):
git stash
git checkout backup
git add .
git commit -m "Automatic Backup %Time%"
git push --all origin
git stash pop
git checkout -
我的目标是每次提交都应该是目录当前状态的精确快照,无论我在运行它时检查了哪个分支。如果较新的提交更改了文件,我希望在出现合并冲突时优先处理。
我实际上并没有尝试合并分支,我只是尝试获取磁盘上快照时存在的文件。因此,如果分支 A 对文件 A 进行了更改,而分支 B 在同一文件上进行了冲突更改,但分支 B 已签出,则备份分支最终应该得到分支 B 的更改,这些更改当前位于磁盘上的文件中,忽略其他。
还有一个我正在尝试做的实际(?)示例: 假设分支 A 有“myfile.txt”作为“Hello World”,分支 B 有“myfile.txt”作为“Hello Dave”。
当我检查分支 A 并在文本编辑器中打开“myfile.txt”时,我希望它会有“Hello World”。当我结帐 B 时,我希望它有“Hello Dave”。
如果在一个分支内提交 1 有“Hello World”,而 2 有“Hello Dave”,就不会有冲突。我希望我的备份分支以包含“Hello World”的提交 1 和包含“Hello Dave”的提交 2 结束,假设提交 1 在我之前签出分支 A 时发生,而在提交 2 发生时分支 B。
我相信 git stash 是我正在做的事情的关键,但它根本不起作用。我尝试了这些命令的几种不同组合,并且它们都在 repo 处于各种状态时在不同的时间点返回了不同的错误变化,因此很难总结它们。我想说我的方法可能从根本上是错误的,所以列出的命令只是为了说明我到目前为止所尝试的内容。
但无论我做什么,我都会遇到合并冲突,或者什么都没有提交。我错过了什么? (如果我可以提供任何其他信息,请告诉我)
【问题讨论】:
-
它必须在 git 中还是可以像 git archive 一样是存档,甚至可能是增量 rsync 备份?
-
我真的喜欢为此使用 Git
-
我能想到的唯一方法是每次备份都使用单独的分支,因为就像莱昂内尔所说,如果你上次备份分支,现在尝试将分支 b 提交到同一个分支,并且 a 和 b 在那里发生冲突会发生冲突。
-
怎么回事?假设分支 A 有“myfile.txt”作为“Hello World”,分支 B 有“myfile.txt”作为“Hello Dave”。当我检查分支 A 并在文本编辑器中打开“myfile.txt”时,我希望它会有“Hello World”。当我结帐 B 时,我希望它有“Hello Dave”。如果在一个分支中提交 1 有“Hello World”,而 2 有“Hello Dave”,那不会有冲突吗?
-
是的,您正确理解了这个问题。你有没有一一运行命令,看看哪里出错了?
标签: git version-control merge backup