推荐:https://www.cnblogs.com/cb0327/p/5066685.html
- Git安装
Git-2.18.0-64-bit.exe:windows下git的工具,支持命令行与图形界面的操作,初学者建议使用命令行方式,类linux的操作。安装完成界右键菜单如下:
TortoiseGit-2.6.0.0-64bit.msi: Tortoise开发的图形化界面,使用起来更方便,初学者建议先不使用,GIT原理与工作方式熟悉后可以选择使用。
2、Github创建库
a)本文以github做为远程库进行设置,首选需要github帐号,请自行申请。
b)在github上创建自己的repository,创建完成后,github上会给出提示,这些命令后面会一一介始:
or create a new repository on the command line
echo "# study1" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:tony820418github/study1.git
git push -u origin master
or push an existing repository from the command line
git remote add origin git@github.com:tony820418github/study1.git
git push -u origin master
3、github ssh配置
由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:使用以下命令生成SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
后面的 your_email@youremail.com 改为你在 github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
添加成功后界面如下所示
为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
4.Git几个库介绍
用习惯svn的同学,一定先要理解GIT的原理,才能理解各个命令的作用,本文引用网上解释,比较清楚,
git跟传统的代码管理器(如:svn)不同, 主要区别在于git多了个本地仓库以及缓存区,所以即使无法联网也一样能提交代码。术语解释:
工作区间: 即我们创建的工程文件, 在编辑器可直观显示,就是我们可见的工作目录;
缓存区: 也叫index区或stage区,只能通过git GUI或git shell 窗口显示,提交代码、解决冲突的中转站;
本地仓库: 只能在git shell 窗口显示,连接本地代码跟远程代码的枢纽,不能联网时本地代码可先提交至该处;
远程仓库: 即保存我们代码的服务器,本文以公共版本控制系统:github为例,登录github账号后可直观显示;
5.从0开始
(1)初始化
使用git init命令,会在当前目录下生成.git文件夹(如果看不到,请打开显示系统隐藏文件设置)而Git进行版本控制所需要的文件,则都放在这个文件夹中
(以下是转载解释,如果只想操作,可以直接跳到下个章节)
- config文件:该文件主要记录针对该项目的一些配置信息,例如是否以bare方式初始化、remote的信息等,通过git remote add命令增加的远程分支的信息就保存在这里;
- objects文件夹:该文件夹主要包含git对象。关于什么是git对象,将会在下一节进行详细介绍。Git中的文件和一些操作都会以git对象来保存,git对象分为BLOB、tree和commit三种类型,例如git commit便是git中的commit对象,而各个版本之间是通过版本树来组织的,比如当前的HEAD会指向某个commit对象,而该commit对象又会指向几个BLOB对象或者tree对象。objects文件夹中会包含很多的子文件夹,其中Git对象保存在以其sha-1值的前两位为子文件夹、后38位位文件名的文件中;除此以外,Git为了节省存储对象所占用的磁盘空间,会定期对Git对象进行压缩和打包,其中pack文件夹用于存储打包压缩的对象,而info文件夹用于从打包的文件中查找git对象;
- HEAD文件:该文件指明了git branch(即当前分支)的结果,比如当前分支是master,则该文件就会指向master,但是并不是存储一个master字符串,而是分支在refs中的表示,例如ref: refs/heads/master。
- index文件:该文件保存了暂存区域的信息。该文件某种程度就是缓冲区(staging area),内容包括它指向的文件的时间戳、文件名、sha1值等;
- Refs文件夹:该文件夹存储指向数据(分支)的提交对象的指针。其中heads文件夹存储本地每一个分支最近一次commit的sha-1值(也就是commit对象的sha-1值),每个分支一个文件;remotes文件夹则记录你最后一次和每一个远程仓库的通信,Git会把你最后一次推送到这个remote的每个分支的值都记录在这个文件夹中;tag文件夹则是分支的别名,这里不需要对其有过多的了解;
除此以外,.git目录下还有很多其他的文件和文件夹,这些文件和文件夹会额外支撑一些其他的功能,但是不是Git的核心部分,因此稍作了解即可。hooks主要定义了客户端或服务端钩子脚本,这些脚本主要用于在特定的命令和操作之前或者之后进行特定的处理,比如:当你把本地仓库push到服务器的远程仓库时,可以在服务器仓库的hooks文件夹下定义post_update脚本,在该脚本中可以通过脚本代码将最新的代码部署到服务器的web服务器上,从而将版本控制和代码发布无缝连接起来;description文件仅供GitWeb程序使用,这里不需要过多的关心;logs则记录了本地仓库和远程仓库的每一个分支的提交记录,即所有的commit对象(包括时间、作者等信息)都会被记录在这个文件夹中,因此这个文件夹中的内容是我们查看最频繁的,不管是Git log命令还是tortoiseGit的show log,都需要从该文件夹中获取提交日志;info文件夹保存了一份不希望在.gitignore 文件中管理的忽略模式的全局可执行文件,基本也用不上;COMMIT_EDITMSG文件则记录了最后一次提交时的注释信息。从以上的描述中我们可以发现,.git文件夹中包含了众多功能不一的文件夹和文件,这些文件夹和文件是描述Git仓库所必不可少的信息,不可以随意更改或删除;尤其需要注意的是,.git文件夹随着项目的演进,可能会变得越来越大,因为任何文件的任何一个变动,都需要Git在objects文件夹下将其重新存储为一个新的对象文件,因此如果一个文件非常大,那么你提交几次改动就会造成.git文件夹容量成倍增长。因此,.git文件夹更像是一本书,每一个版本的每一个变动都存储在这本书中,而且这本书还有一个目录,指明了不同的版本的变动内容存储在这本书的哪一页上,这就是Git的最基本的原理。
(2)添加到缓冲区
的目录下创建Readme.txt文档,内容 为”r1 库初次创建”,使用git status查看状态如下:
使用 git add命令添加到缓存区后,再次查看状态,可以看到为待commit状态。
(3)缓冲区到本地仓库
使用git commit -m “first commit”进行代码提交
(4)地仓库与远程仓库连接
git remote add origin git@github.com:tony820418github/study1.git
(5)本地仓库内容上传远程仓库
Enter passphrase for xxxxxxxxxxxxxxxx: 此处密码为第4步设置的密码
登陆github,可以查看到已经push成功。
(6)远程库clone到本地库
首先我们新建一文件夹:r1copy,进入该文件夹后使用git 指令:
git clone git@github.com:tony820418github/study1.git
指令执行完毕后, 就在该文件夹下生成一份副本啦(相当于多人协作时另一台设备上的工程文件),原理图如下:
(7)代码更新
使用git pull进行更新,更新后通过git log可以查看所有提交纪录