其它
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
添加一个子模块
| git submodule add https://github.com/chaconinc/DbConnector
|
| git submodule update --init --recursive
git submodule update --recursive
# pull
git pull && git submodule foreach git pull origin master
|
克隆子模块代码下来:
| 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,后面就不用再管了。
| # 指定监视的文件类型
$ git lfs track "*.jpg"
$ git lfs track "*.png"
$ git lfs track "*.jpeg"
|
连接远程仓库
使用的Gitlab来做LFS仓库时,第一次push会出现以下消息:
| 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 远程连接有几项常用方法
| $ git lfs clone <URL>
$ git lfs pull
$ git lfs push
# 断点续传(GB级别的仓库常用)
$ git lfs fetch
|
这几项至关重要,如果没有加 lfs 三个字的话,效率真的极低。
lfs 的远程逻辑完全不同:
比如下载文件的话,不像 git 原生一个一个下载,lfs 是先把所有文件夹、文件名都创建好,然后再把真实所需的文件下载下来。
注意事项
一定要git lfs clone
, git lfs push
和 git lfs pull
如果不是使用git lsf
指令clone、push、pull
的话,git 就会按照正常的步骤把所有文件和所有版本全部下载下来,对二进制文档来说效率极低。
所以注意这里一定要指定 lfs!
本地搭建服务端和客户端
https://github.com/git-lfs/git-lfs/issues/3893
服务端
| ➜ 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