Skip to content

其它

gitignore

如果想忽略当前目录,可以在当前目录中添加 .gitignore 文件,在其中写入 * 即可

子模块

https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97

添加一个子模块

1
git submodule add https://github.com/chaconinc/DbConnector
1
2
3
4
5
git submodule update --init --recursive
git submodule update --recursive

# pull
git pull && git submodule foreach git pull origin master

克隆子模块代码下来:

1
git submodule update --init --recursive

GitPython

https://github.com/gitpython-developers/GitPython

https://gitpython.readthedocs.io/en/stable/index.html

踩坑

公司服务器无法 ssh,gitlab 无法 git pull 和 git push

解决方法:
关掉xx软件的自动设置系统代理

Git LFS

众所周知, Git 在储存二进制文件时, 效率堪忧, 因为 Git 默认会压缩和储存每一次提交的快照, 如果二进制文件很多, 会使得 Git 的 clone 效率变得非常低.

https://github.com/git-lfs/git-lfs

https://help.github.com/cn/github/managing-large-files/versioning-large-files

https://git-lfs.github.com/

https://zzz.buzz/zh/2016/04/19/the-guide-to-git-lfs/

https://www.oschina.net/translate/getting-started-with-git-lfs-tutorial

API:
https://github.com/git-lfs/git-lfs/blob/master/docs/api/server-discovery.md#ssh

Mac 安装:brew install git-lfs

安装命令行扩展:git lfs install

典型的 Git LFS Workflow流程:

  • 打开一个本地文件夹
  • git init 初始化为 git 仓库
  • git lfs track 指定监控的 LFS 大文件类型
  • git add . && git commit 正常添加、提交仓库变化
  • git lfs push 通过 lfs 优化推送到远程
  • 修改一些文件
  • git add . & git commit -m "update" 正常 git 流程
  • 修改一些文件
  • git add . & git commit -m "update" 正常 git 流程
  • 修改一些文件
  • git add . & git commit -m "update" 正常 git 流程
  • git lfs pull 通过 lfs 优化更新本地仓库
  • git lfs push

实际上,Git LFS 在这里的作用是一个 Filter,把大文件过滤出来,不对它使用文本的处理方式增大体积,而采用另一套方案处理。
所以你只要一开始建立好 filter,后面就不用再管了。

1
2
3
4
# 指定监视的文件类型
$ git lfs track "*.jpg"
$ git lfs track "*.png"
$ git lfs track "*.jpeg"

连接远程仓库

使用的Gitlab来做LFS仓库时,第一次push会出现以下消息:

1
2
Locking support detected on remote "origin". Consider enabling it with:
  $ git config lfs.https://gitlab.com/jason/test.git/info/lfs.locksverify true

然后照着它的提示,输入命令后再 push,就没有问题了。

常用的 Git LFS 远程连接有几项常用方法

1
2
3
4
5
6
7
8
$ git lfs clone <URL>

$ git lfs pull

$ git lfs push

# 断点续传(GB级别的仓库常用)
$ git lfs fetch

这几项至关重要,如果没有加 lfs 三个字的话,效率真的极低。
lfs 的远程逻辑完全不同:
比如下载文件的话,不像 git 原生一个一个下载,lfs 是先把所有文件夹、文件名都创建好,然后再把真实所需的文件下载下来。

注意事项

一定要git lfs clone, git lfs pushgit lfs pull

如果不是使用git lsf指令clone、push、pull的话,git 就会按照正常的步骤把所有文件和所有版本全部下载下来,对二进制文档来说效率极低。
所以注意这里一定要指定 lfs!

本地搭建服务端和客户端

https://github.com/git-lfs/git-lfs/issues/3893

服务端

1
2
3
4
5
6
7
➜  Desktop mkdir lfs_project
➜  Desktop cd lfs_project
➜  lfs_project git init --bare
已初始化空的 Git 仓库于 /Users/nocilantro/Desktop/lfs_project/
➜  lfs_project git:(master) ls
HEAD        description info        refs
config      hooks       objects

客户端

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
➜  Desktop mkdir new_tmp
➜  Desktop cd new_tmp
➜  new_tmp git clone ~/Desktop/lfs_project
正克隆到 'lfs_project'...
warning: 您似乎克隆了一个空仓库。
完成。
➜  new_tmp echo 'test' > test.txt
➜  new_tmp mv test.txt lfs_project
➜  new_tmp cd lfs_project
➜  lfs_project git:(master) ✗ git lfs track test.txt
Tracking "test.txt"
➜  lfs_project git:(master) ✗ git add -A
➜  lfs_project git:(master) ✗ git commit -m "add test.txt"
[master(根提交) 038f363] add test.txt
 2 files changed, 4 insertions(+)
 create mode 100644 .gitattributes
 create mode 100644 test.txt
➜  lfs_project git:(master) git remote set-url origin file:///Users/nocilantro/Desktop/lfs_project
➜  lfs_project git:(master) git push origin master
Uploading LFS objects: 100% (1/1), 0 B | 0 B/s, done.
枚举对象: 4, 完成.
对象计数中: 100% (4/4), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 401 字节 | 401.00 KiB/s, 完成.
总共 4 (差异 0),复用 0 (差异 0)
To file:///Users/nocilantro/Desktop/lfs_project
 * [new branch]      master -> master

➜  lfs_project git:(master) echo 666 > test2.txt
➜  lfs_project git:(master) ✗ git lfs track test2.txt
Tracking "test2.txt"
➜  lfs_project git:(master) ✗ git add -A
➜  lfs_project git:(master) ✗ git commit -m "add test2.txt"
[master 6bf2e78] add test2.txt
 2 files changed, 4 insertions(+)
 create mode 100644 test2.txt

➜  lfs_project git:(master) git lfs push origin master
Uploading LFS objects: 100% (1/1), 0 B | 0 B/s, done.

➜  lfs_project git:(master) git push origin master
Uploading LFS objects: 100% (1/1), 0 B | 0 B/s, done.
枚举对象: 6, 完成.
对象计数中: 100% (6/6), 完成.
使用 4 个线程进行压缩
压缩对象中: 100% (4/4), 完成.
写入对象中: 100% (4/4), 462 字节 | 462.00 KiB/s, 完成.
总共 4 (差异 0),复用 0 (差异 0)
To file:///Users/nocilantro/Desktop/lfs_project
   038f363..6bf2e78  master -> master

关键在于git remote set-url origin这一步

clone 到其他位置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
➜  new_tmp2 git lfs clone ~/Desktop/lfs_project
WARNING: 'git lfs clone' is deprecated and will not be updated
          with new flags from 'git clone'

'git clone' has been updated in upstream Git to have comparable
speeds to 'git lfs clone'.
正克隆到 'lfs_project'...
完成。
Could not check out "test.txt"
Could not check out "test2.txt"
➜  new_tmp2 ls
lfs_project
➜  new_tmp2 cd lfs_project
➜  lfs_project git:(master) ls
test.txt  test2.txt

ssh clone:

git clone nocilantro:/root/lfs_test