使用 git 管理本地项目
今天在调试完一个小项目之后,我本来想做代码的版本管理。按照以前的做法,我想把整个项目的顶层目录拷贝一份,结果目录下的文件过多,拷贝时间过长。因此,我想尝试其他项目管理的工具。我打算用 git 管理项目,利用 git 管理时可以在 .gitignore 文件中指明不需要上传的文件类型,而且利用代码仓库管理项目是更简明高效的方式,可以记录每一个版本修改的内容,并将不同版本的代码作为分支保存。文档中记录了一些博客链接,最后有一个上传带大文件的项目的例子。如果之后我继续学习使用了 git 的其他功能,会继续在这个文档更新
文章目录
git 架构图
一个详细教程
基本流程
https://blog.csdn.net/HusKiy/article/details/135263188
https://blog.csdn.net/herowgq/article/details/119357688
其中,上传文件时可以通过 git add xxx.xxx 指定具体文件的上传过程,但是上传文件夹似乎没有很好的办法,只能通过 git add . 等范围性的指令来确定上传项目的文件结构
如果是 Win10、Win11,应该需要安装 git bash 后在 git bash 内操作 (也可以在各个 IDE 内操作);如果是 Linux,可以直接在终端操作 (也可以在各个 IDE 内操作)
.gitignore
添加 .gitignore 文件,避免不必要的文件通过 git 上传
https://blog.csdn.net/weixin_45318845/article/details/120740012
其中,.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成未track状态),然后再提交。如果还不行,则需要把本地缓存删除后 push 到 github 仓库,然后全部重新上传
查看存档信息、读档
https://ysyx.oscc.cc/docs/ics-pa/git.html#%E5%AD%98%E6%A1%A3
删除暂存区文件
https://deepinout.com/git/git-questions/107_git_how_to_clear_git_caches.html
push 添加了暂存区以外的文件
https://blog.csdn.net/weixin_42156097/article/details/107029587
git push 报错:fatal: unable to access ‘https://github.com/…‘…
https://blog.csdn.net/m0_45388819/article/details/115795229
https://www.cnblogs.com/xiaobai-cs/p/16803949.html
大文件上传
如果文件大于 100MB,需要安装 git-lfs 再上传文件。安装 git-lfs 后上传大文件命令和原先一致
https://github.com/git-lfs/git-lfs/blob/main/INSTALLING.md
https://git-lfs.com/
https://zhuanlan.zhihu.com/p/480284446
https://blog.csdn.net/GY5338/article/details/116139040
理论上安装 git-lfs 之后上传大文件命令和原先一致,但是在实操过程中还是报了有文件大于 100M 的错误。问到一个解决方法是,要把整个仓库删了,先把其他文件上传,再把超过 100M 的大文件拿过来单独上传。这里顺便把操作过程全部记录一遍
本地修改 / 删除远程仓库文件
https://blog.csdn.net/weixin_45389633/article/details/111244451
暴力但对初学者很有效的方法,直接在网页上删除:
https://docs.github.com/zh/repositories/working-with-files/managing-files/deleting-files-in-a-repository
实操 1
在此之前已经在设置过本地仓库的账号与邮箱。如果未设置,可以运行以下命令完成设置
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
找到所有大于 100M 的文件,另行存储
find . -type f -size +100M
先登入 github 账户
初始化 git 本地仓库
git init
添加工作目录下的文件到暂存区。这里选择添加所有文件
git add .
将暂存区的全部文件上传到本地仓库
git commit -m "xxx"
本地仓库与 github 仓库关联。本地仓库关联名为 origin
git remote add origin https://github.com/xxx/xxx.git
上传之前,设置关联后的本地仓库在 github 仓库中的待上传分支。此处设定为 master 分支。运行后实际会将二者先同步。如果报错:fatal: refusing to merge unrelated histories,则在命令后加–allow-unrelated-histories;如果遇到 fatal: Need to specify how to reconcile divergent branches,参考下面的链接:https://blog.csdn.net/qq_45677671/article/details/122574671
git pull origin master
将本地仓库的全部文件上传到 github 仓库的分支。如果报错:hint: Updates were rejected because the tip of your current branch is behind,参考下面的链接:
https://zhuanlan.zhihu.com/p/422024766
如果 git pull 出现 "fatal: unable to access …"这样的错误,按照下面的链接配置代理:https://blog.csdn.net/xx780452700/article/details/124313274
如果 git pull 出现 “fatal: refusing to merge unrelated histories”,一般是没有先把代码克隆到本地导致的,可以按照这篇的方法设置本地仓库与 github 仓库关联:
git remote set-url origin 远程仓库地址
https://blog.csdn.net/qq_43827595/article/details/104310515
或者直接允许没有关联的本地仓库代码上传到 github 仓库:
git pull origin master --allow-unrelated-histories
完成 git pull 后 git push
git push -u origin master
如果 git push 时出现 “error: src refspec main does not match any” 的错误,可以按照以下链接解决:
https://blog.csdn.net/bjbz_cxy/article/details/113931821
使用checkout创建对应分支
git checkout -b master
现在 100M 以下的文件已经上传。接下来上传大文件。下载 git lfs 后,在本地仓库启动 git lfs
git lfs install
指明要追踪的大文件。理论上不用这么麻烦,git lfs 会自己筛选出大文件,但是我之前尝试的时候出错了,所以现在要指明大文件的路径。这里我要上传的大文件是 xxx.pth
git lfs track xxx.pth
清空暂存区的所有文件
git rm --cached * -r
可以查看一下暂存区当前有哪些文件
git ls-files --stage
然后添加 git lfs 的配置文件到暂存区
git add .gitattributes
添加工作目录下的大文件到暂存区
git add xxx.pth
将暂存区的全部文件上传到本地仓库
git commit -m "xxx"
先 git pull 之后将本地仓库的全部文件上传到 github 仓库
git pull origin master
git push origin master
如果上传结果是大文件覆盖了之前其他文件的上传结果,可以使用 git push 命令的 --no-force 选项,但是这个选项不能保证不覆盖远程分支,因为如果远程分支的历史与本地分支有冲突,git 仍然可能需要强制推送(force push)来合并这些变更。之后会继续学习 git checkout、git branch 等命令
实操 2
先按照这个教程做:
https://zhuanlan.zhihu.com/p/677661247
如果遇到 “batch response: This repository is over its data quota. Account responsible for LFS bandwidth should purchase more data packs to restore access.” 的问题,可以按照以下教程解决:
https://github.com/orgs/community/discussions/68492
总结
git 是一个很实用的代码版本管理工具。要熟悉 git 的功能,最好的方法就是将 git 应用于实际项目的管理中