1. 本地上传代码到Github
- 获取公钥
获取公钥的指令是:
ssh-keygen -t rsa –C “youremail@example.com”
命令运行之后,在路径C:\Users\Acer.ssh下,会出现两个文件,id_rsa是私钥,不能泄露出去;id_rsa.pub是公钥,可以放心地告诉任何人。
- 配置ssh keys
依次点击:Settings -> SSH and GPG keys -> New SSH key,如下所示:
Title:自行设置
Key:这里复制的是公钥,也就是id_rsa.pub的内容,然后点击Add SSH key即可
- 新建仓库进行push
新建仓库之后,github官方其实已经提供了些示例教程示范如何上传一个readme文件在github的远程仓库中。
这里由于我的模型还没有配置cuda加速,只能使用cpu来进行训练,在之后我会再上传一个gpu的训练版本。所以,现在的需求是想要独立的保存当前的cpu版本代码,以供后续回退。
以下是我的完整git命令操作:
# 1. 环境初始化 git init # 2. 增加一个远程服务器的别名,也是本地仓库名origin # 这里测试添加一个别名为origin ,用户名为Clichong,仓库名为CTR的仓库 git remote add origin https://github.com/Clichong/CTR.git # 3. 添加需要上传的文件 # 这里我上次当前目录的所以代码,也就是整个项目 git add ./* # 4. 提交到本地库并进行描述 git commit -m "CrossDomianNet with CPU persion" # 5. 设置tag git tag v1.0-cpu # git tag -d v1.0-cpu可以进行删除 # git tag 可以查看当前环境的tag # 6. push代码到这个tag上面 git push -u origin v1.0-cpu # 7. 与主分支master合并, 并push到主分支上 git checkout master git merge v1.0-cpu git push origin master
如此实现了我的需求:
以下是输入命令的相关弹出信息:
ps:关于github环境配置的任何问题,或者上传的问题,可以参考我另外一篇博文:解决git clone与git push出现的若干问题:Failed to connect to github.com port 443: Timed out
后续,我又补充了一个gpu训练的模型版本(cpu实在是太慢了),然后使用同样的方法,创建另外的一个 v1.0-gpu 分支tag进行 git push 即可。如此既可以获得多分支的版本管理。
同时,需要注意把master分支更新至 我们的 v1.0-gpu 分支tag中,最后效果如下所示:
2. Github下载代码到本地
- 方法1:git clone下载
通过git下载项目比较简单,主要通过git clone指令就可以了,在git bash环境中执行
git clone https://github.com/Clichong/CTR.git
- 方法2:界面下载
也可以直接在github的界面上进行下载
- 方法3:DownGit下载
通过DownGit下载,网址如下:https://minhaskamal.github.io/DownGit/#/home?url=
只需要把需要下载的对应链接放在上面就可以下载了
- 方法4:插件下载
通过一些插件可以进行下载,比如扩展工具:GitZip for github
在右端直接勾选即可下载,非常方便
- 总结:
以上的方法3和方法4直接解决了Github中无法下载目录下的某个单一文件或者单一目录的需求,而使用一些插件会让下载变得更加的方便。
3. Git中的tag标签使用
在上诉我的需求中,想要单独的将cpu与gpu划分为不同的tag版本,以供管理与后续的下载。这里参考资料3来进行详细了解一下Git中的tag使用。
- 创建tag
# 创建本地tag git tag <tagName> # 推送到远程仓库 git push origin <tagName> # 若存在很多未推送的本地标签,想一次全部推送的话 git push origin --tags # 查看当前分支的提交历史 里面包含 commit id git log --pretty=oneline
- 查看tag
# 查看本地某个 tag 的详细信息 git show <tagName> # 查看本地所有 tag git tag 或者 git tag -l # 查看远程所有 tag git ls-remote --tags origin
- 删除tag
# 本地 tag 的删除 git tag -d <tagName> # 远程 tag 的删除: git push origin :refs/tags/<tagName> # 把本地tag 推送到远程 git push origin <tagName>
- 检出tag
# 可以指定标签信息 git tag -a <tagname> -m "XXX..." # 创建附注标签 git tag -a v0.1.0 -m "release 0.1.0 version" # 切换标签 git checkout [tagname] git checkout -b <branchName> <tagName>
4. Git中的branch分支管理
详细参考资料2.
- 创建分支
例子:在本地仓库目录创建一个branch.txt以分支提交。
git branch #显示当前分支是master git branch new-txt #创建分支命名为new-txt git checkout new-txt #切换到新分支 touch branch.txt git add branch.txt git commit -a -m "added branch.txt" git push test_readme new-txt ##把分支提交到远程服务器,只是把分支结构和内容提交到远程,并没有发生和主干的合并行为。
在github左上角可看到,new-txt分支已经上传成功,文件也存在了。主master却还没有新文件,因为没合并。
- 合并分支
如果new-feature分支成熟了,觉得有必要合并进master
git checkout master #切换到新主干 git merge new-txt ##把分支合并到主干 git branch #显示当前分支是master git push test_readme master #此时主干中也合并了new-txt的代码,test_readme为别名
在github中成功合并,新文件 branch.txt 也存在了。
ps:这里其实和tag管理是类似的感觉
- 删除分支与其他命令
#更新远程分支列表 git remote update 别名 --prune #查看所有分支 git branch -a #删除远程分支 git push 别名 --delete 分支名 #删除本地分支 git branch -d 分支名
5. Git基本常用命令
mkdir: XX (创建一个空目录 XX指目录名) pwd: 显示当前目录的路径。 git init 把当前的目录变成可以管理的git仓库,生成隐藏.git文件。 git add XX 把xx文件添加到暂存区去。 git commit –m “XX” 提交文件 –m 后面的是注释。 git status 查看仓库状态 git diff XX 查看XX文件修改了那些内容 git log 查看历史记录 git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本 (如果想回退到100个版本,使用git reset –hard HEAD~100 ) cat XX 查看XX文件内容 git reflog 查看历史记录的版本号id git checkout -- XX 把XX文件在工作区的修改全部撤销。 git rm XX 删除XX文件 git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库 git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库 git clone https://github.com/tugenhua0707/testgit 从远程库中克隆 git checkout –b dev 创建dev分支 并切换到dev分支上 git branch 查看当前所有的分支 git checkout master 切换回master分支 git merge dev 在当前的分支上合并dev分支 git branch –d dev 删除dev分支 git branch name 创建分支 git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作 git stash list 查看所有被隐藏的文件列表 git stash apply 恢复被隐藏的文件,但是内容不删除 git stash drop 删除文件 git stash pop 恢复文件的同时 也删除文件 git remote 查看远程库的信息 git remote –v 查看远程库的详细信息 git push origin master Git会把master分支推送到远程库对应的远程分支上
参考资料:
1. Git使用教程
2. linux下git和github搭建使用教程
3. Git中tag标签的使用