git初体验(一)基础
一、window下的git安装
1.安装教程
网上教程一堆,我参考的是这个:Git_Windows 系统下Git安装图解
2.环境搭建:
在配置完成后,自动加载到系统环境变量中,如我的是:D:\Program Files\Git\cmd
3.配置本地git及生成公钥
安装好Msysgit后,就可以开始配置开发环境了,可以双击Git桌面图标,进入shell后配置name和email,给定一个默认的配置。然后生成公钥:
ssh-keygen.exe -C "your@email.address" -t rsa
这样就可以在你的用户下取得需要的公钥匙,公钥位于你的电脑中“C:\Documents and Settings\Airen.ssh”的“id_rsa.pub”文件下,用记事本打开然后复制下来。
4.设置Github帐号的Public Key
登陆github.Com 网站,在SSH Public Keys 设置你的SSH Public Keys,然后创建SSH keys将复制的id_ras.pub中公钥粘贴进去,保存即可。
通过这一系列的操作就能够对自己的项目的服务中就可以进行git的相关操作了。
二、推荐与介绍
最终我更加推荐再阅读以下几篇博客:
它介绍了版本控制的历史,从原始的版本控制(即原型-备份-复制-修改-备份-再创建-……然后归为一类,完全手动,就像修改word文档一样。)
过渡到本地版本控制
手工管理比较麻烦且混乱,所以出现了本地版本控制系统,记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件。比如RCS。
本地版本控制主要针对个人,为了能够满足团队协作,于是就出现了集中版本控制比如Subversion,Perforce。
集中式版本控制也出现很多问题,比如必须联网才能更新和提交,不联网则不行,也不能看到历史版本,且数据都保存在服务器上。
于是出现了分布式版本控制,如GIT,Mercurial。不是复制指定版本的快照,而是把所有的版本信息仓库全部同步到本地,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,所以,只要有一个用户的设备没有问题就可以恢复所有的数据。
如果比较分布式版本控制(以Git为代表)和集中式版本控制(以Subversion为代表)最大的区别是什么??
在这篇博客学一点Git--20分钟git快速上手中讲解的很清楚,就是就是不用服务器的svn。
学一点Git--20分钟git快速上手这篇博客很好的比较了git和svn,对于像我一样的新手来说实为珍宝,慢慢咀嚼。
三、git基本操作
1.获取git仓库
书上说两种方法,一是在本地目录文件中:用:git init初始化创建仓库。
E:\>mkdir gitdemo
E:\>cd gitdemo
E:\gitdemo>git init
Initialized empty Git repository in E:/gitdemo/.git/
第二种就是克隆远程目录将远程服务器上的仓库完全镜像一份至本地,而不是取某一个特定版本,所以用clone而不是checkout:git clone
E:\knowcars>git clone git@github.com:BeginMan/knowcar.git
Cloning into 'knowcar'...
The authenticity of host 'github.com (192.30.252.130)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of know
n hosts.
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done
基本格式:git clone git@github.com:你的github帐号名称/你的项目名称.git。
通过上面的两种操作,我们打开文件查看,根目录下都含有.git的文件夹,大多数都隐藏起来了,可通过设置显示隐藏的文件、文件夹和驱动器选项显示隐藏文件。.git文件夹含有项目的配置、记录信息等.
2.GIT中版本的保存
与SVN的区别
Git与你熟悉的大部分版本控制系统的差别是很大的。也许你熟悉Subversion、CVS、Perforce、Mercurial 等等,他们使用 “增量文件系统” (Delta Storage systems), 就是说它们存储每次提交(commit)之间的差异。Git正好与之相反,它会把你的每次提交的文件的全部内容(snapshot)都会记录下来。这会是在使用Git时的一个很重要的理念。
这里可以参考GIT对象模型来理解。
四、GIT文件操作
在我极力推荐的这篇博客中:Here就已经将git的原理讲解的很好了,版本控制归根结底就是对文件的操作,要把文件分门别类,对不同的类别有不同的处理方式。
git文件状态才是理解git原理的基石。所以一定要搞清楚GIT的三个工作区域:本地数据(仓库)目录,工作目录,暂存区;要对已跟踪状态(tracked),和未跟踪状态(untracked)有明确的判定和熟练的处理。
注意一点的是:
已跟踪文件都是从git directory取出来的文件的某一个版本或新跟踪的文件。所以当我们无中生有一个文件的时候,它只是未跟踪状态的,我们可以用
git add <file> #来跟踪文件
git status #来查看当前工作目录的状态呢?哪些文件已被暂存?有哪些未跟踪的文件?哪些文件被修改了?
git reset HEAD <file> #取消暂存文件
git checkout --<file> #取消未暂存状态的文件的修改,返回到暂存或者已经提交的状态;
查看文件修改后的差异:
git diff [<filename>] 查看未暂存文件的修改;
git diff --cache 查看已暂存状态的文件的修改;
git diff --staged 效果同上,在git1.6.1以上版本可用。
如下:
---a:表示修改之前的文件
+++b:表示修改之后的文件
上图表示在fileb的第一行后添加了一行"bb",原来文件的第一行扩展为了修改后的1、2行。
注意:git diff显示的是文件修改后还没有暂存起来的内容,看已暂存的内容使用 git diff --cached即可。
/dev/null表示之前没有提交过这一个文件,这是将是第一次提交。
git初体验(一)基础的更多相关文章
- git初体验(三)git分支
分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,然后每个猴子做自己的事情互不干涉,等到所有猴子做完之后,猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了. 你创建了一个 ...
- git初体验(二)基础git文件操作
文件操作续 忽略一些文件 只需在主目录下建立".gitignore"文件,注意新建的是文件而非文件夹,在win窗口中不能建立以.开头的文件,只能在dos下: E:\knowcars ...
- Git:Git初体验——Git安装配置
作为即将成为一个程序员的男人,一直在听别人说Git多好多好,之前也随便了解了一些,但是始终没有决心去学会.现在大四了,只有毕设和一门开学六七周只去过一次课的全员必修课外,也没有什么事情做,何不去做这些 ...
- git初体验(七)多账户的使用
多github帐号的SSH key切换 我有两个github帐号,一个是个人所用,一个是为公司项目所用.如果是单用户(single-user),很方便,默认拿id_rsa与你的github服务器的公钥 ...
- git初体验(六)git配置
一.基本配置 看这篇Git 基本配置其实就解决很多问题了. 二.客户端配置 1.git bash 粘贴与编辑 在git bash客户端头部右键,现在属性,然后把"快速编辑模式勾选即可&quo ...
- git初体验(五)SSH的理解
一.SSH SSH是Secure shell的缩写,即"安全外壳协议",专为远程登录会话和其他网络服务提供安全性的协议,是一项计算机上的安全协议. 传统的网络服务程序,如rsh.F ...
- git初体验(四)git标签
1.git 标题(tag) 关于git标签的描述,参考这里 2.标题管理 创建: 切换到需要打标签的分支上,如: git checkout master git tag v1.0 # 默认标签是打在最 ...
- Git 初体验
第一次接触git的时候,一直在纳闷git和github的区别,解释下,git是版本管理工具,github是开源共享平台,个人这么理解,理解这么多就行了 先说git吧,下载git客户端,地址:http: ...
- Git初体验
http://www.cnblogs.com/yejiurui/archive/2013/07/29/3223153.html
随机推荐
- 嵌入式Linux驱动学习之路(八)创建最小的根文件系统
busybox 在配置busybox,在是否选择要静态链接库时,在静态下,busybox中的工具不需要动态链接库,能够直接运行.而用户自己编写的程序如果需要动态链接库,还是依然需要有. 如果是动态链接 ...
- 使用Access-Control-Allow-Origin解决跨域
什么是跨域 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同). 跨域就指着 ...
- Entityframework core 动态添加模型实体
重新DBContext中OnModelCreating protected override void OnModelCreating(ModelBuilder modelBuilder) { // ...
- 小Y的棋盘问题 题解
有一个n*m的棋盘,上面有一些棋子,每行每列最多只会有一个棋子,不会有两个棋子八连通.问随机一个空格子作为起点,再随机地选择一个空格子作为终点,求问不经过任意棋子最短路的期望长度是多少.多组,n,m& ...
- Python自动补全
转自:http://blog.linuxeye.com/324.html Python自动补全有vim编辑下和python交互模式下,下面分别介绍如何在这2种情况下实现Tab键自动补全. 一.vim ...
- vuejs全局api
全局api set 增加数组 vm.$set 实例化方法 全局api delete 删除数组 vm.$delete 实例化方法 全局 api 组件component 实例化方法 components ...
- Java:对象的强、软、弱和虚引用
1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK ...
- 启动Eclipse后卡在 android sdk content loader 的解决办法
Make sure that eclipse is not active. If it is active kill eclipse from the processes tab of the tas ...
- 02传智_jbpm与OA项目_部门模块
部门模块:具有增删改查(部门)的功能. Dao层的实现: 1,定义一个DepartmentDao.java. 定义基本的数据库操作.
- CentOS搭建socket5代理服务器
1.安装socket5依赖包 yum -y install gcc automake make pam-devel openldap-devel cyrus-sasl-devel 2.下载ss5并 ...