Git使用U盘作为远程仓库

最初只是想用U盘作为远程仓库,解决现存托管平台的若干问题。但是,随着近两天的考虑,逐步实现了本地U盘仓库及时同步+联网同步(可选择仓库,用来发布软件)的功能,这种做法的优点是:

  • 所有仓库在本地U盘, 可以解决网络托管平台访问速度慢、容量有限、费用高、隐私保护等问题。
  • 对于不能联网的电脑,可以使用U盘仓库随时随地编辑代码,离线同步。
  • 对于开源代码,可以设置网络,一条命令实现本地+U盘+网络托管平台同步功能,及时发布最新软件。
  • 配置文件: 网络托管平台githabgitlabgitee等已经配置了ssh或公开的仓库。
    ~/.ugitrcf
    1
    2
    3
    4
    example:
    gitee https://github.com/project.git
    gitee git@gitee_fengzhenhua:fengzhenhua
    gitlab git@gitlab_fengzhenhua:fengzhenhua

配置文件设置后,脚本自动启用网络同步功能。~/.ugitrcf前2行格式范例,不起作用,,您的有效配置应当

ugit 项目

安装脚本

  • 安装版本

    Install ugit.sh
    1
    2
    sudo curl -o /usr/local/bin/ugit https://gitlab.com/fengzhenhua/script/-/raw/usbmain/ugit.sh\?inline\=false 
    sudo chmod +x /usr/local/bin/ugit

    注意:单U盘版是第一代试验性的方案,目前已经实现多U盘版,且功能更加实用,所以单U盘版不再维护。其存在的问题主要是根据U盘名称识别U盘仓库,如果用户修改了U盘名称或使用了同名的其他U盘,则会出现问题,所以不建议大家使用单U盘版。

  • 安装版本

    Install neougit.sh
    1
    2
    sudo curl -o /usr/local/bin/ugit https://gitlab.com/fengzhenhua/script/-/raw/usbmain/neogit.sh\?inline\=false 
    sudo chmod +x /usr/local/bin/ugit

选项及功能

各项操作前,先将U盘插入到Linux电脑的USB接口, 如果没有U盘连接电脑则会出现提示。

命令 功能 备注
ugit -a 克隆全部U盘仓库到本地仓库 2024年04月17日
ugit -ad 关联远程网络仓库 2024年04月19日,需设置~/.ugitrcf
ugit -b 上传全部本地仓库到U盘仓库和网络仓库 2024年04月19日
ugit -c 克隆U盘中已经建立的仓库 2024年04月16日
ugit -h 显示帮助 2024年04月19日
ugit -l 列出U盘仓库 2024年04月18日
ugit -ll 列出本地仓库 仅适用多U盘版2024-04-22
ugit -lr 列出U盘仓库 仅适用多U盘版2024-04-22
ugit -n 新建U盘仓库并克隆到本地 2024年04月16日
ugit -p 上传全部本地仓库到网络仓库 2024年04月18日
ugit -r 删除U盘中已经建立的仓库 2024年04月16日
ugit -s 同步本地、U盘、网络 2024年04月23日
ugit -u 联网升级 2024年04月18日
ugit -v 显示版本 2024年04月19日
ugit 自动更新本机克隆自U盘的仓库 2024年04月17日
ugit.sh -i 安装脚本到/usr/local/bin/ugit 2024年04月16日
  • 2024年04月16日, 获得使用U盘作为Git仓库的方法后,为了尽快投入工作,连夜编写了自动化脚本ugit.sh,直接使用curl命令安装可以保证始终使用的是最新版。
  • 2024年04月19日, ugit.sh目前仅支持Linux系统,欢迎您移植到Windows平台。
  • 2024年04月22日, neougit.sh发布,版本号V3.1, 支持多U盘
  • 2024年04月22日, 修复关联远程仓库bug, 升级版本号V3.3
  • 2024年04月23日, 增加-s同步选项,升级版本号V3.5, 对于U盘中已经删除的仓库,但是另一台电脑上尚没有删除的,此选项将其移除到回收站

技术细节

  1. 插入电脑U盘, 假设您的U盘名字为159xxxxxxxx, 您的Linux用户名为wheel, 则在ArchLinuxU盘的地址为

    1
    /run/media/wheel/159xxxxxxxx

  2. U盘创建空仓库test, 实际就是建立一个文件夹作为git的远程仓库

    1
    2
    3
    4
    cd /run/media/wheel/159xxxxxxxx
    mkdir test
    cd test
    git init --bare

    注意:选项--bare必须有, 如果git仓库创建成功,则提示消息为

    1
    Initialized empty Git repository in /run/media/wheel/150xxxxxxxx/test/

  3. ,初始化本地仓库

    1
    2
    cd ~/test-your
    git init

  4. 建立远程仓库连接,编辑本地git配置文件,写入如下内容,关联仓库及其分支

    ~/test-your/.git/config
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    [remote "usb"]
    url = /run/media/wheel/159xxxxxxxx/test/
    fetch = +refs/heads/*:refs/remotes/usb/*
    [branch "master"]
    remote = usb
    merge = refs/heads/master

    注意:文件~/test-your/.git/config, 中的usb是您对远程仓库的别名,可以任意取定。

  5. 创建README.md文件,同第一次推送文件,注意中。

    1
    2
    3
    4
    5
    git pull
    touch README.md
    git add .
    git commit -m "first push"
    git push

  6. 拉取文件, 注意中。

    1
    git pull

  7. 在新电脑上克隆项目

    1
    git clone /run/media/wheel/159xxxxxxxx/test

    注意:对于clone下来的项目,pushpull和普通的git操作没有区别。如果不像上面这样编辑默认的默认的仓库及分支,则网络上的教程在U盘上建立git仓库,移动的“私有云”完成的配置的话应当使用命令pull usb master拉取,使用push usb master推送,其显然不如此处的配置便捷。

实现此脚本的最初说明 常用的代码托管平台有:githubgitlabgitee. github访问不是很稳定,同时只有付费版的才可以建立私有仓库,否则就是开放的。gitlab支持私有仓库的建立,但是注册gitlab需要google接收验证码,这在国内不容易做到,再者仓库容量5G, 有些不够用. gitee是国内的,优点是速度快,缺点容量也是5G,还有一些其他因素导致也不适合存放隐私文件。上述这些都是自己准备一个U盘建立自己的远程仓库的理由,优点无非是容量大,成本低,速度快,但也不是没有缺点,如果使用的U盘质量不过关那就面临资料损失的风险,所以.