git常用命令及github如何提交大文件

批量添加文件:

git add .   添加新文件和被修改文件,不包括被删除文件,包括子目录,但是不包括空目录,并且会根据.gitignore做过滤

git add * 会忽略.gitignore把任何文件都加入

git add -u  监控已经被add的文件, 不会提交新文件

git add -A  添加所有状态的文件,是上面两个功能的合集

只添加指定文件:

git add filename.txt
git add *.txt

git add index/   添加整个文件夹index

查看文件:

git ls-files  查看已存放文件
git status    查看还没添加的文件

回退:

git reset HEAD <file_name>   未commit,回退某个文件
git checkout -- <file_name>   未commit,回退某个文件
git checkout .  未commit,回退本地所有修改的。没有的提交的,都返回到原来的状态
git checkout <commit HASH>  回退到hash码指定的版本

git reset --hard <commit HASH>  已commit, 返回到某个节点,不保留修改。
git reset --soft <commit HASH>  已commit, 返回到某个节点,保留修改

git reset --hard HEAD^    已commit,回退到上一个版本, HEAD 和当前 branch 切到上一条commit 
git reset --hard HEAD     表示回退当前版本,HEAD指向当前版本

强制覆盖:

    git fetch --all

    git reset --hard origin/master

    git pull

#去掉回车换行转换
git rm -r --cached .   注意 这里是有 "." 的,  ". " 代表当前目录
git config core.autocrlf false

提交设置:

git config --global user.name "your git account name"
git config --global user.email "your email  with which registered on git"

提交:

git commit -m  "..."   提交新文件

git commit -am "..." 只提交修改了的文件

git push

git push -u origin master

查看远程服务器地址URL:
git remote -v

提交大文件报错,假若当前提交含有大文件:

git add .
git commit -m "Initial commit"
git push

提示:Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com

先安装git-lfs:

curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
git reset
apt-get install git-lfs
git lfs install

然后,首先对已经commit的大文件执行回退,也就是回退到上一次的提交点,在项目的本地主目录下执行git log查看commit历史,并获取上次commit对应的序列号,然后执行 git reset <序列号>回退到上一次提交点:

     git log     

执行后可以看到类似下面的内容:      

    然后执行 git reset  134a93525c9a2f194edede3f373dd9d7d07cb1a6 回退到commit大文件之前的上一次提交点,再执行下面的步骤(如果不reset到commit大文件之前的上一次提交点,即使执行下面的步骤,在git push时还是会出错,因为已经commit的大文件在git push时会被和.gitattributes文件一起提交,导致每次git push都会失败,仍然报上面的错误):

     对所有的大文件都执行git lfs track "filename",然后执行git add .gitattributes,例如:

    git lfs track models/c3d/c3d_ucf_model-4999.caffemodel    #生成.gitattributes,加入控制

    git lfs track yolov5m_tracker.weights  #在.gitattributes中添加yolov5m_tracker.weights的控制

    git add .gitattributes   #添加并commit gitattributes文件

    git commit -am "gitattr for big file"  #需要先将 .gitattributes文件单独commit并push,
    git push           #push时需三次输入用户好口令. 

完成.gitattributes文件的提交之后,再进行提交大文件
    git add  models/c3d/c3d_ucf_model-4999.caffemodel

    git add yolov5m_tracker.weights
    git commit -m "c3d and yolov5 tracker model files"
    git push   

.gitattributes 文件内容类似下面这样:

从上面这些步骤可以看出,对于超过100M的大文件,github可能是从防攻击和大文件存储策略方面考虑,实际上是要你先通过lfs track将大文件注册到一个文件.gitattributes中去,并且先将这个文件提交到github服务器上,让服务器端知道你需要上传哪些大文件,然后才能使用正常的git add/commit/push命令提交大文件到github,就好比让大文件提交前需要注册申请登记一下然后才允许上传。

#如果上面在为.gitattributes文件执行git push时还报上面的"Large files detected. You may want to try Git Large File Storage"错,应该是已经commit的大文件混在里面被同时push,这时需要先执行git reset <上一次commit的序列号> 以回退到commit大文件之前的上一次提交点,或者,先备份文件,然后执行下面这个非常危险的命令,完全删除本地的所有文件退回到初始状态,然后再track、add和commit以及push: 
   git reset --hard origin/master

执行git lfs ls-files查看有无已被track的文件,可以看到没有任何文件被track了。

然后重做上面的步骤(从git lfs track <大文件>  开始)提交大文件即可。

在git push 大文件时可能还会报LFS locking API 错,按照提示disable掉它即可:

文件太大,在push的过程中也可能会多次报connection refused的错:

    这个错误没什么,就是再多试几次就可能一次性上传成功了。  

如果因为某些原因某个目录下的文件没有提交,再次git add和commit时说没有任何更新而提交不了,可以先清理这个目录,然后再git add和commit和push:
git rm -r --cached <dir_path>
git add <dir_path>

git commit -m "..."
git push

下载多个submodule中断后继续下载,例如:

git clone --recursive https://github.com/Microsoft/onnxruntime
git submodule update --init --recursive --progress

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值