主题 : 使用微软OneDrive DIY免费私有Git仓库
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605019
威望: 528932 点
无痕币: 59 WHB
贡献值: 0 点
在线时间: 62053(时)
注册时间: 2008-12-25
最后登录: 2024-04-19

0 使用微软OneDrive DIY免费私有Git仓库

Git简介
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,无论是在软件开发还是个人领域,Git被广泛地用来管理代码和版本控制。而著名的GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。
对于个人开发者、编程爱好者或学生群体来说,像GitHub等开源托管平台固然是存放个人代码的首选,但是在某些时候,可能我们并不希望自己存储在云端的代码开源(或代码中包含敏感信息不方便开源),虽然GitHub等托管平台也提供私有库托管服务,但这些服务一般都需要收费,能否自己DIY一个免费私人Git仓库呢?笔者发现Windows10上的Onedrive就能轻松满足我们的需求。下面笔者就以Visual Studio 2017为例(其他IDE原理类似),构建一个可以进行远程推送和拉取的私有Git仓库。
工具准备
    Visual Studio 2013及以上版本
    Git for Windows官方下载地址:点击这里
    带有Onedrive并能正常自动同步的Windows 10
具体步骤
首先我们需要在Visual Studio的GitHub插件。打开Visual Studio,在【工具】-【扩展和更新】-【联机】中窗口右上角搜索框内输入“GitHub”查找“GitHub Extension for Visual Studio”这个扩展插件并下载安装。

安装后需要重启Visual Studio,之后就可以在【已安装】中看到这个插件。或者,在Visual Studio 2015和2017版本的安装程序中,直接勾选这个插件安装。

插件安装后就可以在【视图】-【团队资源管理器】中打开GitHub管理工具。

现在我们创建一个演示解决方案,注意勾选“为解决方案创建目录”和“新建GIT存储库”。

需要注意的是,这里的“新建GIT存储库”是指本地GIT仓库。并非我们将要把代码push(推送)出去的远程仓库。
接下来安装Git for Windows这个工具,安装步骤在我们这里没那么多讲究,下载后全程下一步就好,在此不再赘述。安装后就能看到这个工具

现在我们需要构建一个远程仓库,笔者已经习惯Bash了,就用Git Bash来说明。利用OneDrive目录自动同步的特性,我们可以构建一个远程仓库。首先我们在OneDrive下新建一个目录作为远程仓库目录DemoRepo。

之后运行Git Bash,使用cd命令切换工作目录到刚刚建的DemoRepo下:
$挀搀嬀/color]OneDrive/PrivateRepos/DemoRepo[/pre]然后使用git init命令将目录初始化为git仓库:
$最椀琀椀渀椀琀嬀/color][/pre]之后使用ls -al命令就会发现多了一个.git目录,说明git仓库初始化完成。

现在这个仓库仅仅是最简单的仓库。我们要对这个git仓库做一些配置,才能成为我们想要的“远程仓库”。
使用vim编辑器修改./git下的config配置文件:
$瘀椀洀嬀/color].git/conf[/pre]按i进入编辑模式,
加上如下字段,然后按【ESC】退出编辑模式,wq!保存并推出:
[receive] DenyCurrentBranch =椀最渀漀爀攀嬀/color][/pre]如下图:

TIP:若以上步骤未做,在提交代码时会报错。
之后我们需要配置自动监视脚本,事实上并不需要我们自己写这个脚本,只需要启用就可以。使用cd命令进入..git/hooks目录下:
$挀搀栀漀漀欀猀嬀/color][/pre]现在我们看到了很多后缀为sample的脚本,启用脚本只需要将文件名后的sample去掉就行。这里我们需要用mv命令重命名post-update.sample文件,如下图:
$洀瘀瀀漀猀琀嬀/color]-update.sample瀀漀猀琀嬀/color]-update[/pre]
之后再次使用vim编辑器,编辑post-update脚本,使用#注释掉exec git update-server-info这行,然后在后面加上下面的代码保存:
unsetGIT_DIRcd嬀/color]..git挀栀攀挀欀漀甀琀嬀/color]-f[/pre]TIP:注意cd和..之间有空格。

TIP:若以上步骤未做,可以正常推送代码到这个仓库,但在该目录下无法看到文件。
现在远程仓库也完成了,我们试着写几行代码推送出去。在IDE的右下角有一个箭头图标和一个铅笔图标,点击铅笔图标即可推送代码到本地git仓库。
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605019
威望: 528932 点
无痕币: 59 WHB
贡献值: 0 点
在线时间: 62053(时)
注册时间: 2008-12-25
最后登录: 2024-04-19


输入提交日志后就可以提交代码了,下面列出了本次更改的文件。

提交成功后会提示你需要将代码同步到远程仓库,但是我们还没有在IDE里指定要推送的远程仓库目录。

现在回到【团队资源管理器】的主页,单击【设置】配置远程存储库。

选择【存储库设置】。

添加远程。

这里的远程origin名要与之前配置的一致,这里为“origin”,然后将提取和推送的目录指定为刚才已经配置好的远程库目录。

完成。

现在点击右下角的箭头图标,将代码从本地git库推送到远程git库。

同步完成。

在.git目录下可以查到之前的推送日志和已经同步来的源文件。


最后我们就可以在另一台登录了自己OneDrive的电脑上将这个远程的仓库克隆下来了,操作方法同样是打开【团队资源管理器】,然后选择【克隆】,指定源路径(OneDrive上)和本地路径,最后点击【克隆】就行。

总结
最后总结一下实现的思路。我们利用了OneDrive两个重要的特性:一是目录可以自动同步——意味着我们只要把git仓库放到OneDrive同步目录下,就能自动同步到云端;二是OneDrive目录又可以像本地目录一样直接使用cmd、bash等对其进行操作,因此我们又能轻易将其初始化为git仓库(这点很关键,想象一下,你想把度娘云盘上的目录用bash初始化为git仓库,在不开通超级会员的情况下这是不能实现的)。我简单画了个草图来描述这个过程:

由于本地OneDrive目录会自动和云端同步,因此这个图等效为直接将本地git库同步到了云端,实现了免费的私有git仓库。事实上,只要OneDrive端远程仓库构建好之后,无论使用何种IDE,都可以实现整个过程。
级别: 三阵秋雨
UID: 294086
精华: 0
发帖: 45
威望: 900 点
无痕币: 1045 WHB
贡献值: 0 点
在线时间: 22(时)
注册时间: 2017-11-17
最后登录: 2018-02-24

现在的插件越来越多,有时候真不知道该用啥,比如这个,如果有需求,再难也要,
级别: 六行秋雁
UID: 262648
精华: 0
发帖: 5765
威望: 15243 点
无痕币: 6922 WHB
贡献值: 0 点
在线时间: 863(时)
注册时间: 2015-10-24
最后登录: 2024-04-19

看起来不错的样子
级别: 七朵秋菊
UID: 80465
精华: 0
发帖: 3945
威望: 54514 点
无痕币: 77182 WHB
贡献值: 0 点
在线时间: 311(时)
注册时间: 2009-03-22
最后登录: 2024-04-19

看看,了解了解。
级别: 七朵秋菊
UID: 103114
精华: 0
发帖: 3674
威望: 47476 点
无痕币: 4464 WHB
贡献值: 1 点
在线时间: 827(时)
注册时间: 2010-09-22
最后登录: 2024-04-14

了解一下,谢谢!
知足常乐
级别: 十方秋水

UID: 23
精华: 1
发帖: 261101
威望: 117114 点
无痕币: 2298 WHB
贡献值: 0 点
在线时间: 9389(时)
注册时间: 2007-11-24
最后登录: 2024-04-19

这个基本不用。
事能知足心常乐 人到无求品自高
千山同一月 万户尽皆春 千江有水千江月 万里无云万里天
级别: 总版主

UID: 998
精华: 0
发帖: 605019
威望: 528932 点
无痕币: 59 WHB
贡献值: 0 点
在线时间: 62053(时)
注册时间: 2008-12-25
最后登录: 2024-04-19

这个可以看看,了解一下。
Total 0.063348(s) query 4, Time now is:04-19 17:09, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛