git和github使用

Git

主要概念:本地库、暂存区index file、工作区working tree

提交:工作区add→暂存区commit→本地库

回退:本地库(soft)→暂存区(mix)→工作区(hard)

一、代码托管中心

内网托管:搭建gitlab服务器

外网托管:github、码云

二、本地库和远程库

2.1.团队内部开发

本地库 push 到远程库

远程库 clone 到本地库

2.2.跨团队开发

远程库A fork 到远程库B

A组把自己开发的push和clone到远程库A

B组把自己开发的push和clone到远程库B

然后远程库B pull request →审核→merge到远程库A

三、起步

3.0.建立远程连接

这里用码云作为远程仓库

3.0.1首先在码云创建一个账号

3.0.2添加一个SSH公钥(方法可以参考码云的提示)

图片.png

3.0.3在git本地仓库SSH公钥

查看本地ssh密钥.png
//查看本地ssh密钥命令,如果没有设置过会显示No such file or directory
$ cd ~/.ssh
$ ls
//然后会像上图那样显示
//如果没有,就来创建新的密钥,这里的email地址是码云或github的账号
$ ssh-keygen -t rsa -C "your_email@youremail.com"

Creates a new ssh key using the provided email # Generating public/private rsa key pair.

//其他系统:
Enter file in which to save the key (/home/you/.ssh/id_rsa):
//windows:
Enter file in which to save the key(/c/Users/xxx/.ssh/id_rsa):

完成后,大概是这个样子的

Your identification has been saved in /c/Users/xxx/.ssh/id_rsa.
Your public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:g0Bjal6pyev27yb6lSofUUk7CcB3zVasdLqQDfR3rzk xxxx@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|   .=..oo= o.    |
|   +.o..*o= o    |
|  o +. .oBo+.    |
| + + . oo.+. .   |
|  =   o S. .  .  |
|   .   . o.  o   |
|  .   . o   E    |
| .. + .+     .   |
| ..o.O*          |
+----[SHA256]-----+

3.0.4添加公钥到你的远程仓库

1、查看生成公钥

//输入命令后,显示一串SSH-RSA码,复制到github里面
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZEE8qJA8jYY7NqcoQWwjcvdQuwDG4RHWDKZzpz5bZ1byJRAQA8vxcRJ5mqrwlYcISErXUcsfqjGkLbgXJMPSR7ggwdDgEBcpBXQE+eXFIafgZfUS5ZsCkNXtKJ3RXVdAkQGb6krVUbk7Bll7N+ygyZv1iH0s6GtKlz4uNicpyUZY+lv0BewWTAy+Dm0EpFh8FAIWufhpYpY8MvPf23RaZEMSaB8hDo+Ep4bLHNM5D4SKU6eggEARQYlI3m/f8kHZm600bEoJxwsxM03Qmqcr/kbKFC/TiJWVm4UiLj1DKOiHrtYUBaqx0m0cbtb6LYjoAedtKksLmqJg/sOe0CKEz xxx@qq.com

2、设置远程仓库的SSH公钥
github:登陆你的github帐户。点击你的头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key
码云:码云账户,点击你的头像,然后左侧导航栏SSH。
3、然后你复制上面的公钥内容,粘贴进“Key”文本域内。 title域,自己随便起个名字。
4、点击 Add key。
完成以后,验证下这个key是不是正常工作:
5、查看公钥能不能用

//ssh -T选项的意思为,不分配伪终端
$ ssh -T git@github.com
$ ssh -T git@gitee.com
//显示下面的字符串说明连接OK
$ Hi xxx! You've successfully authenticated, but GitHub/gitee does not provide shell access.

3.0.5.创建一个仓库

图片.png

如码云提示的操作,不过因为我放git的文件夹换过位置,显示证书错误,所以要多一步操作

$ git config --global user.name "用户名"
$ git config --global user.email "xxx@xxx.com"
//把远程仓库地址赋值给origin,origin = 'https://.........'
$ git remote add origin https://gitee.com/用户名/项目名.git
//关闭证书校验
$ git config --system http.sslverify false
//更新证书位置,一般是放在git里面
$ git config --system http.sslcainfo "D:/ProgramFiles/Git/mingw64/ssl/certs/ca-bundle.crt"
//把本文件夹的git仓库推送至远程仓库
$ git push -u origin master
//第一次使用上一行的代码会让你输入码云或github账号密码。

3.0.6[可选]修改git的remote url

使用命令 git remote -v 查看你当前的 remote url

$ git remote -v
origin https://github.com/someaccount/someproject.git (fetch)
origin https://github.com/someaccount/someproject.git (push)
origin  https://gitee.com/someaccount/someproject.git (fetch)
origin  https://gitee.com/someaccount/someproject.git (push)

如果是以上的结果那么说明此项目是使用https协议进行访问的(如果地址是git开头则表示是git协议)

你可以登陆你的码云/github,就像本文开头的图例,你在上面可以看到你的ssh协议相应的url,类似:


图片.png
项目SSH(github).png

复制此ssh链接,然后使用命令 git remote set-url 来调整你的url。

git remote set-url origin git@github.com:someaccount/someproject.git

然后你可以再用命令 git remote -v 查看一下,url是否已经变成了ssh地址。

然后你就可以愉快的使用git fetch, git pull , git push,再也不用输入烦人的密码了

3.0.7git保存远程地址

#查看本文件夹底下,git保存的远程仓库地址(github地址、码云地址)
$ git remote -v
#添加远程地址,别名为origin
$ git remote add origin https://github.com/someaccount/someproject.git
$ git remote add origin https://gitee.com/someaccount/someproject.git

3.0.8PUSH到远程仓库

#push master分支到origin地址
$ git push origin master

3.0.9Clone到本地仓库

#克隆到本地
$ git clone https://github.com/skyloyal/JavaProject.git

3.0.10邀请开发人员

github登陆后,在需要更多开发人员的项目底下。

邀请开发.png

3.0.11.pull到本地

#抓取master分支
$ git fetch origin master
#切换到抓取下来的master分支
$ git checkout 'origin/master'
#合并
$ git merge origin/master
#pull = fetch + merge
$ git pull origin master

3.1.基本操作

//任何项目开始都先初始化本地git仓库
$ git init
//展示文件夹内文件数目
$ ll
//创建文件夹wechat
$ mkdir wechat

3.2.设置签名

3.2.1.形式如下

用户名:XX

Email地址:XXXXX@xx.com

作用:区分不同开发人员的身份

辨析:这里设置的签名和登陆远程库(github)的账号密码没有任何关系。

3.2.2.设置签名命令

项目级别/仓库级别:仅在当前本地库范围内有效

信息保存位置:~/.gitconfig文件

设置签名
$ git config user.name XXX
$ git config user.email XXXXX@xx.com

系统用户级别:登录当前操作系统的用户范围

$ git config --global user.name XXX
$ git config --global user.email XXXXX@xx.com

优先级:就近原则,项目级别优先于系统用户级别,二者都有时,采用项目级别的签名

如果只有系统用户级别的签名,就以系统用户级别的签名为准

不允许都没有系统级或项目级签名.

3.3.提交更改

下面以新建good.txt为例子

#查看工作区、暂存区状态
$ git status
#添加到本地暂存区
$ git add 
$ git add -all
#撤出本地暂存区
$ git rm --cached good.txt
#提交暂存区到本地库,提交后会去到vim编译器,要写一段注释
$ git commit
#用一条命令添加暂存区、提交
$ git commit -a
#带注释提交
$ git commit -m "it is the node" good.txt

3.4.提交记录

#显示所有提交,显示作者author、记录date、记录node,记录hash。
$ git log
#分行显示(完整)
$ git log --pretty=oneline
#分行显示(哈希值最后7位,提交注释)
$ git log oneline
#分行显示(哈希值最后7位,提交注释,head指针移动步数)
$ git reflog

3.5.版本回退

#{9a9ebe0}是提交记录的后7位哈希值,版本回退命令
$ git reset --hard 9a9ebe0
#按相对步数回退
#一步
$ git reset --hard HEAD^
#两步
$ git reset --hard HEAD^^
#三步
$ git reset --hard HEAD^^^
#回退三步
$ git reset --hard HEAD~3

3.6.删除

#删除操作
$ rm good.txt
#把操作放到暂存区
$ git add good.txt
#提交到本地库
$ git commmit -m "delete" good.txt
#如果删除了想要回来,就可以用版本回退命令恢复

3.7.比较文件差异

#将工作区中的文件和暂存区进行比较
$ git diff good.txt
#将工作区中的文件和本地库历史记录比较
$ git diff HEAD^ good.txt
#不带文件名比较多个文件

四、分支管理

刚开始的主干是master

分支大样图.png

4.0.查询分支

$ git branch -v

4.1.新建分支

#新建分支hot_fix
$ git branch hot_fix

4.2.切换分支

#切换分支hot_fix
$ git checkout hot_fix

4.3.接受分支

#在主干上,接受分支
$ git checkout master
$ git merge hot_fix

4.4.冲突的解决

第一步:编辑文件,删除特殊符号

第二步:把文件修改到满意的程度,保存

第三步:git add 文件名

第四步:git commit -m ""

五、基本原理

git的文件管理机制

git把数据看作是小型文件系统的一组快照,同一个文件,做了变化,新的文件就会包含旧文件的指针。

每一个提交对象都会有一个hash值,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容