我为我的个人项目使用本地Git存储库(没有远程版本)。所有内容都会同步到Google云端硬盘,包括Git文件和目录。
昨天我注意到我的工作副本中有两个班级消失了。我使用Git checkout来检索它们。今天,三个类(文件)消失了,我的Git仓库被破坏了,所以git status
会说那里没有存储库。我注意到Google Drive正在同步大约30,000个文件,主要是删除该目录中的文件。我暂停并检查了我的回收站,在那里我找到了一堆Git文件。恢复它们返回了我的Git存储库,我曾经硬重置为HEAD并返回丢失的类/文件。
有没有人有过与本地Git repos同步到云存储的经验并找到了解决方案?我不明白为什么Google Drive应该决定清除我的文件,尤其是Git文件。
答案 0 :(得分:4)
您应该永远使用任何此类同步工具同步git或任何其他dvcs存储库。
这包括git,mercurial,fossil,bazaar等。
对于同步工具,这包括Dropbox,Google Drive,OneDrive,Jottacloud等。
为什么?
因为这些工具并不将存储库视为一个单元,所以他们会逐个文件地考虑内部的各个文件。
以下是一个如何轻松搞乱您的存储库的示例:
如何处理冲突各不相同,但对于其中一些冲突,使用" -conflict"创建了一个额外的文件。文件名。 Git或任何其他工具都不会看到这个冲突的文件。如果两个文件都已重命名,那么您现在已经损坏了存储库。
此类情况可能造成的最大问题来源是在不同计算机上进行的修改混合。将创建冲突文件,但根据您可能在一台计算机上更改的4个文件的顺序,然后在另一台计算机上更改相同的4个文件,但由于同步,排序和冲突,您最终会得到2个他们来自第一台计算机,另外两台来自另一台计算机。属于一起的这些修改的统一已经丢失。
请注意,此处的冲突不应出现在git 对象中,因为这些冲突应该是唯一命名的(SHA1)并且只能添加,但是任何跟踪分支指针等的内务处理文件都会轻松陷入冲突。
这种腐败可能可以在事后修复,但可能很难并且很多工作,并且很可能涉及对Git内部数据结构的良好工作知识。
究竟为什么你经历过你所经历过的事情,以及为什么删除这些文件几乎无法回答。
然而,对于这件事情有一个非常容易的修复。
停止使用Google云端硬盘来同步您的存储库和sign up for a free bitbucket account。将您的存储库推送到云中的私有项目/存储库,只需在您的计算机之间使用正常的推/拉操作。
答案 1 :(得分:2)
上面选择的答案是对的,因为一般来说这是一个冒险和不正确的事情。但是,在实践中,如果我们谈论的是工作副本,那么在某些情况下只有一个人正在使用它。当我在桌面和笔记本电脑之间来回弹跳并进行大量试验时,我有时会将项目的工作副本放入谷歌驱动器中。我仍然最终推动对真正的回购的任何更改,这不是谷歌驱动器,所以除了一点时间,如果我有冲突,没有太大的损失,并且没有事情发生在我身上。
顺便说一句 - 您可以通过ssh访问任何可访问的计算机上的git存储库。您不必须设置git服务器或进行任何特殊设置。只需通过ssh克隆repo,例如git clone mymachine:/path/to/repo
以及随后的推送和拉动将按预期工作。