[github上传/更新/版本控制项目]:token上传,全流程,全状况,使用教程


应粉丝要求,总结一期github的使用教程。
以下所有概念做此假设: A在github仓库开源了一个项目,B使用A的项目

1. 基本概念

  • github平台: 旨在依托平台托管项目
  • Respository: 一个项目对应一个Respository(仓库)
  • Star: 收藏
  • fork : 从A的仓库拉取项目到B的仓库,会显示该项目来自A
  • Pull Request: B的项目中对A的项目作了更改,想同步到A,向A请求
  • Watch : 关注项目,项目有更新会提示你
  • Issue: 发现代码bug提出问题的地方,你可以根据issue去改进自己的项目

2. 首次上传

2.1 考虑tag的情况

0为必做项,1-8为主要流程,其他为辅助功能。默认读者已经已经在网站里新建了一个空项目(仓库),很简单Create a new respository,要输入Respository(即仓库或项目名),Description(描述一下仓库), 可选Public和private(私有,指定人员能见,收费的), 初始化一个readme。

2.1.1.设置本地的用户名和邮箱

告诉远程,这个文件是谁提交的。

git config --global user.name "输入你的用户名"
git config --global user.email "输入你的邮箱"

例如

git config --global user.name "zhangsan"
git config --global user.email "zhangsn@123.com"
2.1.2.查看本地的用户名和邮箱
$ git config user.name 
qinsot(本地用户名)
$ git config user.email 
xxx@163.com(本地邮箱)

也可以如下代码全部查看

git config --list
2.1.3. 初始化空的仓库

在想上传的文件夹下打开终端,输入

git init
2.1.4.添加想要上传的文件

这里我选择全部文件,也可以提交单个

git add .
查看本地提交状态
git status

得到结果如下:

$ git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)

	新文件:   .catkin_workspace
	新文件:   .vscode/c_cpp_properties.json
	新文件:   .vscode/settings.json
	新文件:   build/.built_by
	新文件:   build/CATKIN_IGNORE
	新文件:   build/CMakeCache.txt
	新文件:   build/CMakeFiles/3.10.2/CMakeCCompiler.cmake
	新文件:   build/CMakeFiles/3.10.2/CMakeCXXCompiler.cmake
	......
2.1.5.提交文件

-m后边接任意字符,(建议添加,否则可能后续报错)

git commit -m "first commit"

至此,我们已经在本地完成了仓库的配置,下一步就是提交到远程。

2.1.6.添加origin

最后的网址就是自己clone的那个git网址。

git remote add origin https://github.comxxx.git
2.1.7.添加版本tag

为了便于后期的版本追溯,特地使用tag功能.本次版本设置为1.0

git tag -a 1.0 -m "1.0"
2.1.8.上传文件

master是分支名称,也可是main等,在tag标签的隔壁,可自定义

git push -u origin master 1.0
2.1.9.登陆github创建token

输入6的代码后,看到如下:

$ git push -u origin master 
Username for 'https://github.com': Qin-sor
Password for 'https://Qin-sor@github.com': 

这一步在8.13更新后,会出现错误,原因如下:
这里的用户名还是我们的username ,但是这里的密码在8月13的改动下,就成了我们需要自己生成的一个token.
登陆github官网操作如下:
1,打开设置
打开setting

2,选择左侧开发者设置(developer settings)
开发者
3.点击左侧个人令牌(personal access tokens),再点击右侧新建令牌(generate new token)生成
4. 对令牌的设置,note标签,可用时间这里我选择30天,下方的几个可选项我选择(repo)可以通过命令行增加,(de可以通过命令行删除)。设置
可删除
5. 点击生产后,界面如下:复制我们绿色框里的token。
令牌

2.1.10. 上传文件后续

拿到token后,填入password一栏即可传输,效果如下:

$ git push -u origin master 
Username for 'https://github.com': Qin-sor
Password for 'https://Qin-sor@github.com': 
对象计数中: 547, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (492/492), 完成.
写入对象中: 100% (547/547), 712.56 KiB | 3.49 MiB/s, 完成.
Total 547 (delta 264), reused 0 (delta 0)
remote: Resolving deltas: 100% (264/264), done.
To https://github.com/Qin-sor/my_test.git
 * [new branch]      master -> master
分支 'master' 设置为跟踪来自 'origin' 的远程分支 'master'

此时在我们的github中就有了我们的代码。

至此,仓库master/tag==1.0下,就有了我们的工程

2.2 不考虑tag,只维护一个工程,没有版本迭代

2.2.1 开始

开始操作同2.1.1–2.1.6,不赘述

2.2.2 上传

不加版本控制直接上传,如下代码:master是分支

git push origin master

结束

3. 非首次上传

3.1 更新到不同tag情况

3.1 提交至一个新tag下

  • 假如文件作了更改,要提交到tag 2.0下,如下操作即可,
  1. git add .
  2. git commit -m "写什么都行,最好注释"
  3. git tag -a 2.0 -m "2.0 version" 新建一个2.0的tag
  4. git push -u origin master 2.0提交代码到master/2.0

3.2 更新存在的tag工程

方法一:容易上手
  • 采用强制推送的方式,假如我的tag为2.0已经存在,master/2.0上提交新的代码覆盖/更新,如下操作:
  1. git add .
  2. git commit -m "写什么都行"
  3. 确保自己本地位于master分支下,用git branch,看到在master 路径下接着操作,如果不在就切换到master分支git checkout master
  4. 然后,git tag -f 2.0命令来更新2.0 tag。这个命令会将2.0 tag指向第二步的commit,
  5. 最后,使用git push --tags --force命令来强制推送更新的tag到远程仓库
    至此,github上的tag2.0项目已经更新,但是这个操作可能会影响其他人的代码,因此需要谨慎操作,最好提前通知其他人。
方法二:推荐,安全(NOT)
  • 采用先远程删除一个tag(不影响其他tag),然后再操作,因为本来就是要被更新掉的嘛。
  • 仍然假设我的tag为2.0已经存在,master/2.0上提交新的代码覆盖/更新,如下操作:
  1. 首先,切换到 tag 2.0 所在的 commitgit checkout 2.0
  2. 确保代码修改后执行git add .git commit -m "更新代码到 tag 2.0"
  3. 删除远程仓库的 tag 2.0, git push origin :refs/tags/2.0
  4. 重新打 tag 并推送到远程仓库git tag -fa 2.0 -m "更新代码到 tag 2.0"git push origin 2.0 -f
  • 注意,这里使用了 -f 参数,表示强制推送 tag。因为你要覆盖已有的 tag,所以必须使用强制推送。
  • 如果其他人已经从远程仓库拉取了 tag 1.0,你修改后再强制推送,其他人拉取代码时可能会出现问题,因为他们的本地仓库中的 tag 1.0 已经与远程仓库的不一致。因此,如果涉及到团队协作,建议与团队成员协商好再进行操作。

3.2 更新到不需要tag(版本控制)的情况

  1. 首先,在本地仓库中使用git add命令将更改的文件添加到暂存区:git add <file-name>例如所有git add .

  2. 然后,使用git commit命令将更改的文件提交到本地仓库:git commit -m "commit message"其中,commit message是你对此次更改的描述。

  3. 最后,使用git push命令将本地仓库中的更改推送到服务器上的仓库中:git push

  • 如果你之前使用过git push命令,并且已经将本地仓库和服务器上的仓库关联起来了,那么这个命令会自动将更改推送到服务器上的对应分支。
  • 如果你没有关联过仓库,你需要使用以下命令将本地仓库和服务器上的仓库关联起来:git remote add origin <server>其中,server是服务器上的仓库地址。其实就是例2.1.6

可能出错情况:执行git push报错如下:

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
    git push --set-upstream origin master
  • 这个错误提示说明你的本地 master 分支没有设置上游分支,也就是和远程仓库中的哪个分支进行追踪和同步。
  • 解决这个问题,可以按照错误提示中的建议,使用 git push --set-upstream origin master命令,将本地的 master 分支推送到远程仓库,并将其设置为上游分支,这样就可以直接使用 git push 命令提交本地修改到远程 master 分支了

问题2:报错如下:

error: RPC failed; HTTP 408 curl 22 The requested URL returned error: 408
fatal: the remote end hung up unexpectedly

可能是由于代理服务器不稳定,更多的原因是单个文件大于100M(github的要求),运行指令:

git config --global http.postBuffer 524288000

提升单个文件为500M。
最推荐的方式是站外缓存,最好还是LFS缓存的形式,如下:
git lfs install
安装完成后,你可以使用以下命令将这些大文件加入Git LFS追踪:
git lfs track "work/weights/*.pdparams"
此后,将这些文件提交到GitHub时,它们会被Git LFS处理。
请注意,上传到Git LFS的文件不计入GitHub的存储限制。单个文件大于50M就建议使用LFS了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值