简单使用手册,简单介绍多人使用 GitHub 的步骤,详细教程见这个博客
首先要有个账号,注册一个即可。[可以用学校邮箱注册,这样可以去 GitHub Education
package 申请学生账号,有许多好处,比如免费的 pro GitHub, Digital
Ocean 50刀优惠券。不想折腾的话,这段话略去]
考虑到某些原因,推到GitHub上会很慢,从GitHub上clone也会很慢,最好的办法是从校内转接一次。先去USTC Linux User Group - GitLab 注册个帐号,然后从Create project中点击Import project,就可以从GitHub先把工程导到科大服务器上,最后再clone下来,平时没事儿可以用科大服务器作为主要同步源,隔长一点时间再推到GitHub上,毕竟多一个备份多一份保险!
然后去下载客户端,下载之后安装好,同时也把 Git 下载下来,GitHub Desktop 是在 Git 的基础上开发的一个可视化的客户端,大部分时候还是比较好用的,但是出现问题和冲突的时候还是要 Git Bash 来处理。
安装好之后先登陆,然后把工程给 Clone 下来,当然私有的工程需要让创建者加入协作列表,注意如果是合作项目不要 fork,因为 fork 之后就变成自己的项目了,就不好协作了,客户端 clone 的办法如下图所示。
Clone 会比较久,倒杯茶,如果网络状态不好的话会失败,失败了再来
Clone 好了之后先创建一个自己的 branch,branch 的意思是自己的一个分支,分支示意图见下图 (图片来自廖雪峰博客分支管理这一章),就是说整个 master 相当于项目的总分支,最终的版本都体现在 master 上,然后创建一个公共的 dev 分支,这个分支是用来交流用的,等到一定程度了再把 dev 分支的内容合并到 master 上,按照软件设计的流程来说一般是发布一个版本的时候才会合并一次到 master 上,也就是 master 上要是一个可用的版本。
每个人创建一个自己的分支,创建方法如下图所示 Branch -> New branch 输入名字完成,创建好之后就可以在这个分支上工作了,每次工作的时候都要检查 GitHub 的这个branch 是不是在自己的分支上,当然文档的修改除外,文档的修改直接在 master 上做,这样大家才能看到。选在这个分支上之后,所有的提交是提交在这个分支上的。
每次做了修改之后就可以在 GitHub Desktop 上看到自己修改的内容,增加和删去的内容都会显示出来,然后再左边填上要提交的 commit,注意不要写没有意义的 commit, 这样子以后查看才会方便。
删去的内容用红色标记,添加的内容用绿色标记
提交了修改之后,就算是完成了,客户端右上角会一直提示推送到云端,其实个人的分支没有必要推送到云端,因为推送到云端之后别人就可以看到,也可以做修改,只是说没有必要推送,推送也没有关系,只是推送了一次之后每次都要推送。
上面的过程完成了个人开发的流程,下一步就是要进行协作开发的流程了,我们创建了一个叫 dev 的分支,这个分支的作用就是把大家的代码都合并到一起,然后推送到云端,合并的办法如下图所示,现在 branch 中切换到 dev 分支,然后再 branch 中选择 merge,然后选择自己的分支,merge 之后再推送到云端即可,这样别人同步之后就可以在看到 dev 上的修改了。
有重大发布的时候,切换到 master 分支,然后再 master 分支 merge dev 分支,然后推送到云端即可。
一般来说推送到云端之后再从 dev merge 一次 master 这样保证 master 和 dev 处在同一个状态。
这里基本操作就算是完了,如果要把别人推送到 dev 分支上的内容同步到自己的分支,那就反过来,先切换到自己的分支,然后 merge from dev, 就可以完成同步。
git remote add oschina https://git.oschina.net/zxbetter/test.git
https://segmentfault.com/a/1190000011294144
配置多个 SSH Keyhttps://www.awaimai.com/2200.html
参见这个网址,执行下面的配置
#不对0x80以上的字符进行quote,解决git status/commit时中文文件名乱码
git config --global core.quotepath false
下边是 Git Bash 的一些笔记,不详细说了,详见博客
集中式版本控制系统是将版本库放在中央服务器,然后干活的时候从中央服务器获取最新版本,干完活之后再把自己的内容推送给中央服务器,缺点就是必须联网才能工作,而且要求网速够快,不然要等很久。
分布式是每个人的电脑里都有一个版本库,然后可以把自己的版本推送给对方,相互之间可以看到对方的版本,通常也会设置一个中央服务器,方便交换大家的修改
sudo
apt-get install git
其他平台
每个教程都要求设置一个 global 的用户名和路径,先设上
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
创建文件夹
mkdir learngit
cd learngit
创建仓库
git init
git add <filename.filetype>
git commit -m
git status
git diff
通过 git log 查看提交记录
然后通过 git reset --hard HEAD^ 来进行回退到上个版本,HEAD^^ 就是上上个, HEAD~100 就是往前 100 个版本
也可以 git reset --hard <versin_id>
git reflog 记录了每次操作的命令
一幅图说明问题,图片还是来自廖雪峰博客
git 管理的是 add,每次修改之后 add 将文件添加到 stage 里面,然后 commit 会将修改添加到 master 里面
工作区丢弃 git checkout --
已经提交到了暂存区 git reset HEAD
提交到版本库,就只能用版本回退
git rm
git commit -m
即使手动删除了也要 rm 一次
ssh-keygen
-t rsa -C "youremail@example.com"
git
remote add origin git@server-name:path/repo-name.git
git
push -u origin master
git
push origin master
git clone git@server-name:path/repo-name.git
分支的作用在于可以创建个人的独立版本,自己完全修改好之后再推送给别人,然后合并到原来的分支上,自己创建的分支别人是看不见的,还是在原来的分支上干活。
这一章的内容特别多,一定要看教程
git checkout -b <branch_name>
或者
git branch <branch_name>
git checkout <branch_name>
git branch
当前分支上会打*
在新的分支上创建修改的内容不会影响到原有的分支
git merge <branch_name>
会提示合并模式,用的是 Fast-forward 也就是快进模式,直接把 master 指向当前的分支
git branch -d <branch_name>
当两个分支同时修改了文件之后,再 merge 就会提示冲突,这个时候就要手动解决冲突,merge 之后会在冲突文件里面填上冲突的部分,然后对其进行合并和修改即可
合并冲突之后再 add 然后 commit
可以用 git log --graph 来查看分支合并图
git
log --graph --pretty=oneline --abbrev-commit
注意,合并了冲突之后是在当前的 branch 里面,其他的 branch 还是照旧没有修改
在写工作区的时候常常会去修复 bug,这个时候可以先把现有的工作区给存起来
这里为什么要存起来是因为如果写了一些东西,但是还不想提交,那么如果不存就切换到其他的分支去了,会出现一个问题:当前写的东西跑到其他分支去了。
使用的时候发现一个问题,就是只有一个文件添加的时候没有办法 stash,要先 add 到 stage,所以我理解的是存的是 stage 的东西
git stash
然后这些改动就都看不见了,就可以愉快的去修 bug 了
修完了再弹出
git stash pop
或者
git stash apply
然后删除
git stash drop
查看存储状态
git stash list
上面的都是一些技术上的问题,现在进入了方法的层次,一个合理的分支应当是如下图所示
master 应当是相当稳定的,仅仅用来发布新的版本,所有的改动都应该在 dev 上进行
图片再上面,就是有 master 的那个分支管理
注意一定要从下往上合并,合并的时候使用这样的语法
git
merge --no-ff -m "summary " <branch_name>
欢迎关注我的语雀和公众号
本文采用 BY-NC 协议
署名-非商业性使用 (BY-NC):只要在使用、公开时进行署名,那么使用者可以对本创作进行转载、节选、混编、二次创作,但不得将本创作或由本创作衍生的创作运用于商业目的。