编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Git 实用干货总结(附异地私有Git仓库实现办法)

wxchong 2024-08-05 01:16:31 开源技术 34 ℃ 0 评论

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

    最后,给大家一个自动将所有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为例)

  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. 在Github中添加ssh key,具体方法可以百度搜索下,很简单。

  3. 在~/.ssh/目录下新建config文件,用于配置各个公私钥相对应的主机.内容如下:

    Host liyongjin

    Hostname github.com

    User liyongjin

    IdentityFile ~/.ssh/liyongjin

    Host iwifigame

    HostName github.com

    User iwifigames

    IdentityFile ~/.ssh/iwifigame

  4. 测试连接情况(可跳过)。以ssh -T git@Host的形式测试。Host为上面config文件里定义的Host 名字。如:

    ssh -T git@liyongjin

    ssh -T git@iwifigame

  5. 修改git仓库地址。将@后的github.com改为config文件里Host定义的地址。如下:

    git clone git@github.com:iwifigame/vimrc.git 改为
    git clone git@iwifigame:iwifigame/vimrc.git

    Git会根据config中的配置,使用其中Hostname指定的服务器地址与dentityFile指定的私钥来进行版本管理。从而达到使用多个 ssh key 的目的。

  6. 其它配置。 如果你使用smartgit,则要在菜单edit/preference中,选中Authentication 选项下的Use system SSH client。才可以使用多个ssh key。其它Git软件应该也要做相应的处理,才能使用系统默认的ssh client。

  7. 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错误)。有如下两种处理办法:

  1. 一劳永逸的方法。打开 ~/.gitconfig 文件,设置safecrlf为false。

    [core]

    autocrlf = input

    safecrlf = false

  2. 另一种方法。就是用vim打开该文件, 执行set ff=dos 或者 set fileformat=dos这两个命令的区别只是一个是简写的形式。 它的作用是将文件的格式设置为dos格式,即windows下的格式。

    5. Git 其它

  • 使用TortoiseGit,如果出现如下错误:

    isconnected no supported authentication methods available(server sent: publickey,keyboard interactive

    则按如下的步骤解决:

  1. 找到TortoiseGit -> Settings -> Network

  2. 将SSH client指向你的ssh程序。它的位置一般在C:\Program Files\Git\usr\bin\ssh.exe

  • git pull = git fetch and git merge

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表