在OneDrive同步文件夹中的Git代码库

44

我试图在OneDrive同步文件夹中创建一个git存储库,但遇到了问题。

我使用OneDrive通过云来在多个设备之间同步文件夹。在我的开发机器(Win 7 64)上,OneDrive文件夹位于C:\Users\myusername\OneDrive下。

我在该目录下创建了一个名为\git的子文件夹,并为我的代码(foo.git)在其中创建了一个git存储库。

在同一台机器上,我可以将该存储库克隆到另一个未与OneDrive同步的文件夹,并推送和拉取更改。

然而,在我的另一台机器(Win 8.1 64)上,也同步了OneDrive,在那里尝试克隆存储库时(看起来所有内容都在C:\Users\myusername\OneDrive\git\foo.git下),我收到一个“这不是有效的git存储库”错误消息。

由于它们进行同步,“\git”文件夹的内容在两台机器之间应该是相同的。我能想到的唯一可能是我的git存储库中可能存在一些隐藏的文件夹/文件没有得到同步。据我所知,OneDrive应该同步所有东西,包括隐藏的文件和文件夹。

远程git存储库中是否有隐藏的文件夹或文件?

我不确定为什么这不起作用,我已经读到其他人使用OneDrive存储git远程存储库没有问题。也许一个机器是Win 7,另一个是Win 8.1?

由于我已经尽力Google寻找解决方法,有没有人能提供任何建议或见解,告诉我可能出了什么问题?


尝试一下这个博客,它可以很好地与SVN一起使用。对于GIT也应该是一样的。 - Babulu
3
我有一个类似的问题。Onedrive 显示合并错误,并且会在 .git 目录下不断创建 FETCH_HEAD 文件的副本,并在文件名后添加我的电脑名称。这似乎是一个无限循环。是否有解决方法,或者我必须编写一个批处理脚本来清除这些副本? - Vin Shahrdar
1
@VinShahrdar 我有同样的问题。我认为原因是当你运行 git fetch 时,Git 会非常快地更新文件(每个新/更新的分支都会更新一次?),以至于 OneDrive 开始同步它,但在上传到云端之前就被覆盖了,OneDrive 就会将其视为冲突。这是错误的,但事实就是如此。幸运的是,看起来它是无害的:冲突副本只是过时的,你可以忽略它们或删除它们。 - Fabio says Reinstate Monica
1
我是唯一一个建议不要在OneDrive支持的文件夹中放置git存储库的人吗? OneDrive同步和git可能无法很好地协同工作。 - theking2
8个回答

56

OneDrive同步客户端现在支持同步文件夹中包含句点字符'.'的文件夹,只要这些文件夹在您的OneDrive文件夹内,这应该使您能够开始自动同步那些git仓库。

获取最新版本的OneDrive客户端并安装即可使用。


你知道这个方法是否也适用于Windows 10中的OneDrive消费者版本吗?我还没有更新,而你提供的链接安装了OneDrive商业版客户端在我的8.1机器上。 - Leon Overweel
1
现在也可以在OneDrive for Business上工作了,但只适用于Windows系统,Mac(15.3.0 beta)仍然无法同步,“文件夹路径包含无效字符或不受支持的扩展名”。 - leoce

25

OneDrive目前还不支持同步以点号开头的文件,比如.git文件夹,其中保存了git元数据。

因此,您在OneDrive上看不到这些项目的同步。

(这只适用于旧版本的OneDrive客户端,在2015年8月我创建了一个新答案反映了当前版本的功能)


在本地 git 存储库中,我肯定可以看到一个 .git 文件夹,但是你所说的远程 git 存储库中的那个文件夹在哪里呢(没有看到它)。 - Ryan
如果您在http://OneDrive.live.com上查看,您将看不到包含所有分支/远程/提交历史特定信息的.git文件夹。 - Peter Nied
1
每当我启动Git Shell时,OneDrive就会拒绝同步(即使过了一天)。如果我关闭Git Shell和OneDrive,然后重新加载OneDrive,它就会同步。有什么想法吗?这是否相关? - Xonatron

10

2

我认为Per Mikkelsen有一个解决方案: https://www.permikkelsen.dk/how-to-host-your-git-repository-on-onedrive.html

这种方法是在Onedrive上创建一个远程repo,在本地机器上进行克隆

  1. 在Onedrive上(也就是在你的机器上的本地镜像),创建未来repo的目录。假设它的windows路径是C:\Users\me\OneDrive\Documents\myrepo
  2. 进入该目录,使用git bash here并输入命令:$ git init --bare。您可以检查该目录是否具有Git repo的所有文件
  3. 在本地文件系统中,进入将包含未来本地repo的目录(例如C:/R)。使用git bash here并输入命令:$ git clone file:///C:/Users/me/OneDrive/Documents/myrepo。请注意file:///前缀和正斜杠

现在你拥有一个本地的仓库,并在Onedrive上有一个远程仓库,它将自动同步到你所有的设备上。 对我来说,这个方法很有效。 希望能够对你有所帮助。


1
手动从office.com同步并耐心地合并任何冲突对我目前来说都有效。下一个测试将是看它在日常中的表现如何。我知道OneDrive不是一个理想的解决方案,但有时为了隐私,它是在工作区之间传递文件获得类似于GitHub功能的简单方法。

1
手动创建名称为“.git”的文件夹可行,且“.git”将出现在OneDrive服务器上。

1

我不会回答这个问题,因为我认为没有一个直接的答案。但是这种使用情况很有吸引力。 假设我喜欢将我正在工作的所有项目保存在OneDrive同步文件夹中的projects文件夹中,并带有所有Office魔力作为附加值。假设这是一个Web项目。我会有

OneDrive/Projects/
    Project A/
    Project B/
      Documentation/
        UserManuals/
      Backups/
        2020-09-16/
      SQL-queries/
      htdocs
         .git
         .gitignore
         assets/css
         index.php
      Research/

在Projekt B中,我想要同步除了htdocs(和可能的备份)文件夹之外的所有文件夹,因为它已经在Git服务器(BitBucket)上受到某种版本控制。对我来说,这是一个非常普遍的问题,我还没有找到令人满意的解决方案。当然,我可以将htdocs文件夹(和备份文件夹)移出OneDrive树的范围,但那会使布局变得脆弱,最终确定并归档项目将不会直接进行。

我能想到的一个解决方案是将Projects移出OneDrive,将要同步的内容添加到单独的文件夹中,并将此文件夹作为符号链接添加到OneDrive文件夹结构中。


-4

我在使用DropBox和OneDrive时也遇到了同样的问题。

在文件夹完全同步并且其他客户端完全意识到更改之前,需要一些时间。如果有东西丢失,git会像预期的那样抱怨。

手动强制两个方面进行同步可以解决这个问题。

我怀疑它在Windows上的实现方式(或使用方式)导致了这个问题。Ubuntu上的Dropbox没有显示出这个问题。(除非我太匆忙,期望我的另一个盒子3秒钟后完全同步;-))

最终,我放弃了DB&OD的解决方案。最终我决定在github上开一个账户。更加方便。

在计算机上安装类似GitLab或Gitblit(在Win上使用Tomcat)将有助于私人存储库。


今天机器都在同一个网络上,应该已经同步了,但是克隆仍然失败。我已经通过OneDrive同步了我的OneNote工作簿多次,一切似乎都很正常。 - Ryan
看起来是这样,但可惜并不是。 (至少在Win上不是) - lboshuizen
我无法在GitHub上创建私有存储库(我还不想分享我的代码),因为没有付费账户。这就是为什么我尝试使用OneDrive方法,因为我已经在使用OneDrive并且它应该可以工作。 - Ryan
如何强制执行 OneDrive 文件夹同步?我没有看到这个选项。 - Ryan
在一台计算机上设置类似GitLab的东西非常容易。虽然它不完全像GitHub,但肯定能够工作。 - lboshuizen
@Ryan,你可以使用Bitbucket。它可以支持任意数量的私有资源库。 - yamm

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