# Git 使用流程
1. 准备工作
在[我的github代码仓库](https://github.com/thrillerqin)新建一个项目,项目名称为qt_ex;
2. Git全局设置项查看和设置(Git global setup)
NaNundefined查看全局设置项
```
git config -l
```
- 设置全局设置项
```
git config --global user.name "qinbao"
git config --global user.email "haphqb@163.com"
```
3. 创建SSH Key
第1步: 在用户主目录下(在windows下git bash输入命令*cd ~* 进入该目录),看看有没有.ssh目录(由于.ssh是隐藏的,须用*ls -a* 查看),如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
```
$ ssh-keygen -t rsa -C "youremail@example.com"
```
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面。然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容。
具体参考[廖雪峰git教程之“远程仓库”](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374385852170d9c7adf13c30429b9660d0eb689dd43a000)。
4. 初始化代码仓库
切换至项目所在目录,初始化代码仓库。
```
cd existing_folder
git init
$ git remote add origin git@github.com:thrillerqin/qt_ex.git
git add .
git commit -m "Initial commit"
git push -u origin master
```
git init
3. 创建新的仓库(Create a new repository)
```
git clone git@gitlab.haph.com:qinbao/qb-project.git
cd qb-project
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
```
5. Existing Git repository
```
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.haph.com:qinbao/qb-project.git
git push -u origin --all
git push -u origin --tags
```
## 附: ##
- git add命令
|git_add_命令|描述
|-|-
| git add . | 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
| git add -u | 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
|git add -A |是上面两个功能的合集(git add --all的缩写)
- 给别人仓库提交代码的流程
当你想更正别人仓库里的错误时,要按照下面的流程进行:
1. 先 fork 别人的仓库,相当于拷贝一份别人的资料。因为不能保证你的修改一定是正确的,对项目有利的,所以你不能直接在别人的仓库里修改,而是要先fork到自己的git仓库中。
2. clone到自己的本地分支,做一些bug fix,然后发起pull request给原仓库,让原仓库的管理者看到你提交的修改。
3. 原仓库的管理者review这个bug,如果是正确的话,就会merge到他自己的项目中。merge的意思就是合并,将你修改的这部分代码合并到原来的仓库中添加代码或者替换掉原来的代码。至此,整个 pull request 的过程就结束了。
>[warning] 我尝试用类比的方法来解释一下pull reqeust。想想我们小学写作业,作业就像仓库,你的作业肯定会有很多错误,就相当于程序里的bug。老师把你的作业拿过来,相当于先fork。在你的作业上做一些修改批注,相当于git commit。最后把改好的作业给你,相当于发pull request,你拿到试卷重新改正错误,相当于merge。
### 附:
[我的github代码仓库](https://github.com/thrillerqin),仅供本人学习和使用。