【Git】关于git新手使用操作流程(简单版)
Git简介
Linux 内核开源项目有着为数众广的参与者。绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。到 2002 年,整个项目组开始启用一个专有的分布式版本控制系BitKeeper来管理和维护代码。到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linux Torvalds)基于使用BitKcheper 时的经验教训,开发出自己的版本系统。他们对新的系统制订了若干目标:
•速度
•简单的设计
•对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
•完全分布式
•有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统.-----------《Pro Git》
摘要
Git 有三种状态,文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。由此引入了 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。本篇简书将围绕这三个工作区域进行讲解。
Git主要的功能有两点,一是版本控制(可以回退代码),二是团队开发。
Git的使用主要有三种形式,Cmd、Bash和GUI。
允许很多的工程师同时对同一个项目在本地进行开发,当某个工程师觉得自己那部分差不多了,就直接提交到远程服务器,那其他的工程师都可以把它clone下来,然后选择性地和本地代码进行merge操作。
其中还有一个分支(branch)的概念,大致意思就是说,首先从远程的origin的master主分支下载最新的版本到origin/master分支上,然后比较本地master分支和origin/master分支的差别,最后进行合并。在本地进行开发后,及时地提交并推送至远程仓库的分支下,再由最后一名工程师做合并处理,这样就避免了每一位工程师的随意提交最后导致代码紊乱。
安装
官方版本可以在 Git 官方网站下载。打开 http://git-scm.com/download/win,下载会自动开始。Linux 和Mac自行百度或goole,比较简单,在安装方面就不多做讲解。
Git学习
Git bash的使用
1、配置
安装完过后,我们点击打开Git Bash,输入
git config --global user.name "yourname" git config --global user.email youremail@example.com
为了让当前新建的仓库能够被看到 让隐藏的文件夹能够出现在电脑这边,输入control folders,
2、初始化仓库
git含有初始化的Git仓库中的所有必须文件,不要轻易去更改。
3、将文件添加到本地仓库中
按照流程来:
1.我们新建一个.txt文件,输入i love git;
2.通过git add命令保存到缓存区中(m.txt得到跟踪);
3.通过git commit命令提交到git本地仓库。
可能会出现错误:
git warning: LF will be replaced by CRLF in XXXX.The file will have its original line endings in ..
警告意思:LF和CRLF都是换行符,意思就是说git要把你的LF换行符全部换成CRLF这种换行符
产生原因:
首先问题出在不同操作系统所使用的换行符是不一样的
Uinx/Linux采用换行符LF表示下一行(LF:LineFeed,中文意思是换行);
Windows采用回车+换行CRLF表示下一行(CRLF:CarriageReturn LineFeed,中文意思是回车换行);
Mac OS采用回车CR表示下一行(CR:CarriageReturn,中文意思是回车)。
查看状态
git config core.autocrlf
当你输入这个命令的时候,会得到三种结果
true(很多同学会出现这种结果)
当我们操作系统是Windows的时候,会出现true
当为true时,git会将你暂存(git add)文件认为是文本文件,把换行符的CRLF转换成LF,而签出这些文件的时候又会变成CRLF格式,所以会警告你,这虽然只是一个小问题,但是会干扰跨平台多人合作开发,
举个例子:你同事用的是Mac或,linux系统,你用的是Windows系统,
最后搞交时就会造成冲突
解决办法,执行命令
git config core.autocrlf false
如果不是跨平台开发而且是winows系统,基本上忽略这个警告就可以啦
false
文本文件保持其原来的样子
input
add时git会把CRLF转换成为LF,签出时依旧为LF
ok,就是这么简单,把一个文件提交到了本地仓库,当然在提交的过程中可以查看文件状态,文件做了哪些更改,以及对文件撤销,删除等等操作将在后面依依讲解。
Git与GitHub
既然有了本地仓库,那么得有一个远程仓库,能够一起协作,这样才说得过去吧。但是有了GitHub这个与Git搭配的远程仓库,我们为何不使用呢。那么这里将讲一个怎么与github联系到一起。
首先你得需要一个github账号,如果没有的请自行申请一个github账号。因为本地仓库和远程仓库之间的传输是经过ssh加密的,所以得对ssh进行设置。
SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。
在管理Git项目上,有两种克隆到本地的方法。
直接使用https url克隆到本地
使用SSH url克隆到本地
这两种方式的主要区别在于:
使用https url对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。
使用SSH url需要在只用之前先配置和添加好SSH key。每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。
1.检查你电脑上是否有SSH Key
~/.ssh 或者用~/.ssh ls
上边这行命令的作用是看一哈你的电脑上有没有.ssh文件夹。
如果电脑上有,就会显示bash: /c/Users/…/.ssh: Is a directory
如果电脑上没有,那就显示bash: /c/Users/…/.ssh: No such file or directory
这边复制出来的内容是公司的电脑:
chenxiaomeng@ND-XM-ChenXiaoMeng MINGW64 ~ $ cd ~/.ssh bash: cd: /c/Users/Administrator/.ssh: No such file or directory chenxiaomeng@ND-XM-ChenXiaoMeng MINGW64 ~ $
2.创建SSH key
如果你电脑上有了,你就可以直接跳过这一步
在Git Bash中
执行命令进行SSH KEY的配置:
ssh-keygen -t rsa -C "youremail@example.com"
就会出现
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/CXM/.ssh/id_rsa):
这时候已经创建好.ssh这个文件夹了,会提示:
Created directory '/c/Users/CXM/.ssh'.
Enter passphrase (empty for no passphrase):
就是让你输入密码,如果你设置了密码,那在你使用ssh传输文件的时候,你就要输入这个密码。为了避免麻烦,建议不用设置,直接回车。
Enter same passphrase again:
这就是让你再输入一次密码,就跟我们注册账号时候设置密码需要设置两次一样。上一步没设置密码,这里直接回车就可以了。到这里你的秘钥就设置好了,你会收到这段代码提示:
Your identification has been saved in /c/Users/…/.ssh/id_rsa
Your public key has been saved in /c/Users/…/.ssh/id_rsa.pub
还会向你展示你的秘钥长啥样
输入 ~/.ssh 则SSH key 已经创建成功
3.添加SSH Key到GitHub
点击右上角新建一个SSH Key,title随便给他起个名字就好。然后是key,这时候你要打开你刚才在电脑上的SSH key。
还记得这一步吗:
按照红框框里的路径,找到.ssh文件夹。用记事本打开id_rsa.pub文件,全选其中的内容粘贴到网页的Key中。
4.测试一下该SSH key
在git Bash 中输入以下代码
$ ssh -T git@github.com
注意是git@github.com,不是你的邮箱。
然后会提示你:
The authenticity of host ‘github.com (13.229.188.59)’ can’t be established.
RSA key fingerprint is SHA256:nThbg6kXUp…
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入yes,回车
接下来就会提示你输入密码,如果上边设置ssh的时候,你没设置密码会提示你:
Warning: Permanently added ‘github.com,192.30.255.112’ (RSA) to the list of known hosts.
警告完了,如果你能看到如下提示,那你已经成功设置SSH密钥。
Hi “用户名”! You’ve successfully authenticated, but GitHub does not provide shell access.
如果你看到 access denied,者表示拒绝访问,那么你就需要使用 https 去访问。
新建远程仓库
成功建成
我们依次执行上面的命令行:
fatal: unable to access 'xx': Failed to connect to github.com port 443: Timed out
fatal: unable to access “xxx‘‘: OpenSSL SSL_read:Connection was reset, errno 10054
git config --global http.sslVerify "false"
刷新github页面:
这样,经过上面的步奏,我们将本地仓库上的内容传入到了远程仓库当中。
小结
这篇简书中大略的讲解了一哈git的一整套流程,但是其中很多细节和操作并没有讲解到,这些将会在下篇详细讲解。
解决无法访问Github的问题
原理:绕过DNS解析,直接使用本地DNS记录进行直接跳转
1.通过命令提示符ping到GitHub的IP
打开命令符:win+R,输入cmd,回车即可调出命令符
ping:在命令行中输入ping http://github.com,记录红框中的IP
2.DNS查询
在浏览器中打开DNS查询网站:http://tool.chinaz.com/dns?type=1&host=github.com&ip=
选一个TTL值小的IP记录下来
用创建桌面快捷方式的方法快速修改HOST
通常在修改HOST文件的时候,授权编辑器管理员权限是一件比较麻烦的事,而且每次修改的时候都要去授权管理员权限,实在是很麻烦,这里给大家介绍一种能够快速便捷修改HOST文件的方法
那就是通过建立桌面快捷方式,并在双击打开时让快捷方式以管理员身份运行
该方案的灵感也是来源于火绒安全软件,里面有一个修改HOST文件的小插件,其实它就是在桌面建立快捷方式来达到目的的
1.新建桌面快捷方式
对象的位置,输入:C:\WINDOWS\system32\notepad.exe C:\WINDOWS\system32\drivers\etc\hosts
快捷方式名称自定义
2.授予快捷方式管理员权限
右键单击快捷方式,查看属性,选择高级,勾选用管理员身份运行
确认后即创建成功
Git可视化教程——Git Gui的使用
1.在本地新建版本库
首先,我们打开Git GUI是这样的一个界面,选择第一项,新建版本库。
然后选择你需要进行版本管理的项目路径,我选择了一个Logincatch登录爬虫的项目。
当你创建了版本库的时候,你可以在该项目的路径下看见多了一个.git文件夹(设置了隐藏文件不可见的话看不见)
在Git Gui中,如果Unstaged Changes(未缓存的改动)中包含文件,则先点击Stage Changed,将未缓存的改动加入缓存,再点击Commit;否则需要先点击Rescan扫描项目中进行过改动的文件。注:提交描述必须要填写,不然无法提交。
提交成功后,我们可以在Repository->Visualize All Branches History中看到我们提交的历史记录(这是提交到本地而不是提交到远程服务器)。至此,本地版本库就创建成功了。
2.将项目提交到远程
上一步已经使用Git在本地建立起了版本库,然后我们需要将该项目提交到远程服务器以便同事或其他合作者共同参与开发。一般的开源项目使用github作为远程服务器。其实在本地简历版本库后,只需要点击push就可以直接上传。但是我们还没有将本地的Git与github建立联系以及设置安全协议。
首先,我们需要在有一个自己的github帐户,然后在github上新建一个repository,名字也叫做LoginDemo(可以和本地项目名不一样)。
在Git Gui中,选择Remote->add添加远程服务器,远程服务器信息有两种填写方式,填写https地址或ssh地址,对应github项目的https和ssh地址,推荐使用ssh方式。
1.https地址
这种方式需要输入你的github帐户和密码,意味着通过这种方式你只能够操作自己的项目。
2.ssh地址
这种方式需要进行授权设置,在Git Gui的菜单栏,点击Help->Show SSH key->Generate SSH KEY创建密钥。
然后在github的Personal settings中添加它,title随意,可以用Home,company等作为标识来区别。
添加远程服务器信息。
接下来,我们便可以直接在Git Gui点击push提交至远程客户端,刷新一下github,便可以看到项目已经在repository中了。
3.从远程下载更新
设想多人参与项目开发,每个人都只push到远程,完全不顾其他成员的进度,这样的开发模式无疑是有问题的。我们最好的做法是,每次push到远程的时候,先从远程把目前进度fetch下来,在和自己目前项目进度merge后,再将它push到远程。打开Git Gui,在菜单栏中选择Remote->Fetch from->LoginTest,便可以从远程服务器更新到本地,但是尚未与自己当前项目合并。
4.合并解决冲突
从远程fetch后,选择Git Gui的Merge->Local Merge进行合并,选择Tracking Branch。
如果本地有一个方法名叫findUser,而远程服务器中该方法的名字改变了,例如变成了findPassword,则合并遇到冲突,可以右键空白部分选择保留本地版本或远程版本进行合并(图中绿色的代码表示冲突部分)。
5.克隆github上的项目到本地
在Git Gui的主界面选择克隆已有版本库。
Source Location即github中项目的地址,和第二部分(将项目提交到远程)中一样,可以选择https地址或ssh地址,Target Directory是在本地存放该项目的路径。点击Clone,成功从github将项目克隆到本地。