git 学习笔记(一)

git clone 取到所需的文件,文件不在master分支上,有如下三种方法
1) git clone remote-repository
git checkout -b branchA
git clone会取下远程版本库的所有分支的代码,并在本地默认创建master分支,所以clone 下来后要切分支到文件对应的分支上去才可以看到所需的文件

2) git clone -b branchA remote-repository
-b参数会在克隆拉下所有分支代码后,本地代码切到branchA分支上。

3) 如果想用git 仅拉下某一个单独的文件,而不要拉下自己不想要的文件,在git 1.7.0之前是不能实现的,这也是违背git 保持本地库与远程库一致性的原则。git版本控制方式是以快照的形式,既版本库整体状态的记录,而SVN是基于文件方式的集中存储。(没有用过SVN,一直在用git,对SVN的理解参考这篇文章http://blog.csdn.net/xuyaqun/article/details/49275477)在git 1.7.0之后,用 sparse clone的方式可以实现对某个文件的单独克隆。具体方法如下

git init #初始化一个空库
git remote add -f origin remote-repository #添加远程仓库别名,并同时fetch代码到本地
git clone core.sparsecheckout true #开启sparse clone
echo “dirname” >> .git/info/sparse-checkout #设置需要pull的目录,!表示匹配相反的。
git pull origin branchA #开始pull代码。
这样就可以只获取目标文件,不用拉下所有的文件。

彻底删除git库中的大文件
有时候会不小心在代码库中加入了很大的文件比如2个G的包,占用很大的磁盘空间,想删掉。git rm ,git commit后在本地和代码库文件列表中看不到这个文件了,但是查看磁盘空间,所占用的空间仍然没有释放。由git 文件存储的方式可以推导出来,git 存储的是文件的快照,而不是以文件为基础,git 所有的增删修改都是以一种patch的形式打上去的,在文件目录中看不到这个文件,但是git库中这个大文件仍然是以patch形式存在的,不然版本回退到git rm前,这个文件怎么会又存在呢。如果要彻底在库中删除这个文件,既释放其所占的磁盘空间,要用git 的 filter-branch命令,,同时重写所有分支的历史,在历史中删掉才算彻底删除,这样一来,就算回退到之前的版本,这个大文件也是永远找不回来了。不过这是一个非常危险的命令,与git的初衷是相违背的,并且重写历史后,所有commit的id都会改变,且永远找不回来。在对这个命令不是熟练的情况下不要用,如果实在不行的话,重建一个库。参考博客http://www.tuicool.com/articles/vAVVZrA 寻找并删除Git记录中的大文件。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论

打赏作者

wawaolalala

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值