1. 网盘+Git 实现异地、免费、安全、私有的版本管理
相信很多人都想拥有自己的私有版本管理平台,无论是文档管理还是代码管理,都是非常方 便的。如果用Github的私有仓库,每年的支出都是一笔不小的费用,而且Github有些地方网 络访问速度慢;而如果用Github的免费版本,那就私密安全性又得不到保证。 另外如果自己 搭建Git服务器,对于普通大众来说又没有必要,况且又耗时费力而不讨好。
这里一种非常好的替代方法就是在网盘中创建Git仓库,然后利用网盘来进行仓库的同步。 从而实现多地、免费、安全、私有的版本管理。在使用的过程中,只要保证网盘的同步即可。 比如在工作的地方,把代码或文档更新到同步盘中;回到家中,打开同步盘,它会自动同步。 然后再用Git更新即可。这样就保证了各个地方的版本同步而且又方便安全。
具体的操作方法如下:
1. 申请网盘。一定要申请那种带有同步盘功能的网盘。这里有几个大坑:
有的网盘,它对于大量的小文件支持不是很好,即有时一些小文件它会同步不到,而Git 提交时,会生成大量的小文件,从而造成同步时Git仓库的损坏。
有的网盘,并没有同步盘功能,或者同步盘功能是要收费的,则这些尽量不选择。
对于网盘的选择,个人推荐微云。
2. 创建本地仓库。在网盘的同步盘中创建Git仓库(要利用网盘来实现异地同步)。命令如下 (注意在git bash中运行,下同):
git init --bare
3. 克隆本地仓库。命令如下,注意斜杠与反斜杠:
git clone F:/weiyun/repo/test
通过上述步骤,一个异地、免费、安全、私有的版本管理系统就搭建好了。
对于Git提交中生成很多小文件从而影响网盘同步效率的问题,可以在同步盘的Git仓库中执行 如下命令中的任何一个来解决:
1. git repack -d 命令,它会将git仓库中所有没有打包的碎片文件打包到一个大的文件中,
从而大大减少仓库下objects文件夹中碎片文件的数量。
2. git repack -a -d 命令,它会将所有的文件(包括已打包的)打包到一个文件中,
这会生成 一个新的文件。这个命令要慎用,因为它会增加网盘的同步负担(已同步的文件相当于
要重新同步).
3. git gc 等价于git repack -a -d。
生成ssh key.
ssh-keygen -t rsa -C iwifigame@126.com -f ~/.ssh/iwifigame
ssh-keygen -t rsa -C liyongjin2009@gmail.com -f ~/.ssh/liyongjin
在Github中添加ssh key,具体方法可以百度搜索下,很简单。
在~/.ssh/目录下新建config文件,用于配置各个公私钥相对应的主机.内容如下:
Host liyongjin
Hostname github.com
User liyongjin
IdentityFile ~/.ssh/liyongjin
Host iwifigame
HostName github.com
User iwifigames
IdentityFile ~/.ssh/iwifigame
测试连接情况(可跳过)。以
ssh -T git@Host
的形式测试。Host为上面config文件里定义的Host 名字。如:ssh -T git@liyongjin
ssh -T git@iwifigame
修改git仓库地址。将@后的github.com改为config文件里Host定义的地址。如下:
git clone git@github.com:iwifigame/vimrc.git 改为
git clone git@iwifigame:iwifigame/vimrc.gitGit会根据config中的配置,使用其中Hostname指定的服务器地址与dentityFile指定的私钥来进行版本管理。从而达到使用多个 ssh key 的目的。
其它配置。 如果你使用smartgit,则要在菜单edit/preference中,选中Authentication 选项下的Use system SSH client。才可以使用多个ssh key。其它Git软件应该也要做相应的处理,才能使用系统默认的ssh client。
最后,给大家一个自动将所有Git仓库小文件打包的脚本(gitbat.bat):
@echo offfor /d %%i in (*) do @echo. &&@echo -------------------------------------------------------- &&@echo %%i &&@cd %cd%\%%i &&@git repack -d
比如在你的同步盘F:\weiyun\repo中,有很多你的Git仓库a、b、c...。那么在F:\weiyun\repo 中,创建gitbat.bat文件,然后把上面的内容复制到里面。以后每个月执行一下该脚本即可, 则所有以前提交生成的小文件都会利用命令git repack -d打包。
2. Git Key 管理
2.1 ssh key 生成。使用如下命令:
ssh-keygen -t rsa -C iwifigame@126.com -f ~/.ssh/iwifigame ssh-keygen -t rsa -C liyongjin2009@gmail.com -f ~/.ssh/liyongjin
2.2 Git 自动使用多个 ssh key(以Github为例)
3. Git 版本管理
3.1 远程版本提交撤销。有两个方法,如下。
1. 撤销最后的一个版本(注意版本安全,可能引起别人版本错误)。
git reset --hard HEAD~1
git push -f
2. 使用revert命令(更安全的做法)。相当于重新提交一个指定版本的反修改。
git revert HEAD
3.2 只克隆最近的一个版本。
对于大型仓库,这个命令能大大减少网络、硬盘、 时间等资源的使用。命令如下:
git clone--depth=1
4. Git 常见问题处理
4.1 文件换行符问题(LF转成CRLF错误)。有如下两种处理办法:
一劳永逸的方法。打开 ~/.gitconfig 文件,设置safecrlf为false。
[core]
autocrlf = input
safecrlf = false
另一种方法。就是用vim打开该文件, 执行
set ff=dos
或者set fileformat=dos
这两个命令的区别只是一个是简写的形式。 它的作用是将文件的格式设置为dos格式,即windows下的格式。
5. Git 其它
使用TortoiseGit,如果出现如下错误:
isconnected no supported authentication methods available(server sent: publickey,keyboard interactive
则按如下的步骤解决:
找到TortoiseGit -> Settings -> Network
将SSH client指向你的ssh程序。它的位置一般在C:\Program Files\Git\usr\bin\ssh.exe
git pull = git fetch and git merge
本文暂时没有评论,来添加一个吧(●'◡'●)