Git 教程(一)

Git 教程(一)

Git 项目迁移

迁移某一个分支到新项目

1. git clone 源项目,或copy一份原项目工程
2. 切换到需要迁移的分支,如 `Release`
3. gitlab远端新建一个工程,如BioTest.git
4. `git remote rm origin` # 删除源项目远程连接
5. `git remote add origin 新项目远程地址` # 添加新远程地址
6. `git push origin Release` #将需要迁移的分支推送到新的远端
7. `git push origin --tags` #将所有tags推送到新的远端

Git clone

1. Clone 指定分支

git clone -b branceName(注解:分支名) + git仓库地址

2. Clone 指定深度

clone的时候,可以指定深度,如下,为1即表示只克隆最近一次commit.
git clone git://test.git --depth 1

Git 项目工程瘦身

  1. 下载需要瘦身的工程到本地,以minusTest.git为例
  2. 将刚下载的工程推送到远端新的仓库中,防止误操作删除服务器端文件
	1. vi .git/config
	2. 修订 url="newGitTest.git" //newGitTest: 代表新的git仓库地址
	3. git push branch1 branch1
  1. 首先找出git中前五大的文件:
    git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
  1. 第一行的字母其实相当于文件的id,用以下命令可以找出id 对应的文件名:
    git rev-list --objects --all | grep 8f10eff91bb6aa2de1f5d096ee2e1687b0eab007
  1. 拿到了文件之后就是删除了,来个简洁的命令
	git filter-branch -f --index-filter 'git rm -r --cached --ignore-unmatch *' --prune-empty --tag-name-filter cat -- --all


    其中*号处替换为要删除的文件,*是通配符,默认删除所有文件,谨慎使用
    filter-branch 是让git重写每一个分支, 
    -f  假如遇到冲突也让git强制执行, 
    --index-filter 选项指定重写的时候应该执行什么命令,要执行的命令紧跟在它的后面,在这里就是git rm --cached --ignore-unmatch password.txt ,让git删除掉缓存的文件,如果有匹配的话。
    
    --prune-empty 选项告诉git,如果因为重写导致某些commit变成了空(比如修改的文件全部被删除),那么忽略掉这个commit。
    
    --tag-name-filter 表示对每一个tag如何重命名,重命名的命令紧跟在后面,当前的tag名会从标注输入送给后面的命令,用cat就表示保持tag名不变。 
    紧跟着的-- 表示分割符,最后的--all 表示对所有的文件都考虑在内。
  1. 最后压缩无用的文件并提交到远程github仓库:
下列操作后,工程被瘦身,文件减小

rm -rf .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
git push --all --force //提交到远端仓库

若 git gc --aggressive --prune=now 出现 'out of memory' 报错,下列操作可解决
1. 设置内存大小
    git config --global pack.windowMemory 1024m
2. 设置cache 大小
    git config --global pack.deltaCacheSize 128m
3. 设置压缩使用一个线程
    git config --global pack.threads 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值