Git-起步
Git命令行
只要输入git,Git就会不带任何参数地列出它的选项和最常用的子命令。
要得到一个完整的git子命令列表,可以输入git help --all
显示版本号
git --version
每个git子命令的文档都可以通过使用git help subcommand、git --help subcommand或者git subcommand --help
创建初始版本库
创建初始版本库
在~/public_html目录创建你的个人网站,并把它放到Git版本库里。
$ mkdir ~/public_html
$ cd ~/public_html
$ echo 'My website is alive!' > index.html
执行git init,将~/public_html或者任何目录转化为Git版本库
$ git init
Initialiaed empty Git repository in .git/
Git不关系你是从一个完全空白的目录还是由一个装满文件的目录开始的。两种情况下,将目录转移到Git版本库的过程是一样的。
为了显示目录是要给Git版本库,git init命令创建了一个隐藏目录,在项目的顶层目录,名为.git。而CVS和SVN则将修订版本信息放在项目的每一个目录下的CVS和.svn子目录里。
~/public_html目录下的一切都保持不变。Git将这个目录当做项目的工作目录,隐藏在.git内的版本库由Git维护。
将文件添加到版本库中
git init命令创建一个新的Git版本库。最初,每个Git版本库都是空的。为了管理内容,你必须明确把它放入版本库中。这种有意识的步骤将重要文件与临时文件分离开来。
使用git add file将file添加到版本库中。
$ git add index.html
tips: 如果目录中已经有了很多文件,使用git add . 命令让Git把当前目录及子目录中的文件都添加到版本库里(参数"."、点活着UNIX说法中的"dot",是当前目录的简写)。
在add之后,Git知道index.html这个文件是要留在版本库里的。然而,到目前为止,Git还只是暂存(staged)了这个文件,这时提交之前的中间步骤。Git将add和commit这两部分开,以避免频繁变化。
运行 git status 命令,显示中间状态的 index.html
$ git status
# On branch master
# Initial commit
# Changes to be committed:
# (use "git rm --cached <file>..." to unstaged)
#
# new file: index.html
这个命令显示新文件 index.html 将在下一次提交的时候添加到版本库里。
除了目录和文件内容的实际变化,Git还会在每次提交的时候记录其他一些元数据,包括日志消息和做出本次变更的作者。一条完全限定的 git commit 命令必须提供日志消息和作者。
# 在git 1.8.3.1 版本无法在没有配置用户名和用户邮箱的情况下提交成功
$ git commit -m "Initial contents of public_html" \
--author="Jon Loeliger <jdl@example.com>"
Create initial commit 9da581b: Initial contents of public_html
1 files changed, 1 insertions(+), 0 deletions(-)
create mod 100644 index.html
在 git commit 期间让Git打开你最爱的编辑器,要设置你的GIT_EDITOR环境变量。
# 在tcsh中
$ setenv GIT_EDITOR emacs
# 在bash中
$ export GIT_EDITOR=vim
在把这次添加新文件提交到版本库后,git status 命令显示没有突出的、暂存的变更需要提交。
$ git status
# 在 master分支上
nothing to commit(working directory clean)
配置提交者
可以用 git config 命令在配置文件里保存你的身份。
# 使用 git config --global 则表示身份配置对所有项目生效
# 删除 --global 则表示身份配只对当前仓库生效
$ git config user.name "Tucci Luo"
$ git config user.email "uetucci@163.co"
也可以使用 GIT_AUTHOR_NAME 和 GIT_AUTHOR_EMAIL 环境变量来告诉 Git 你的姓名和email地址。这些变量一旦设置就会覆盖所有的配置设置。
再次提交
来提交一次对 index.html 文件的修改。打开这个文件,转换成 HTML 并保存。
$ cd ~/public_html
# 编辑 index.html 文件
# cat index.html
<html>
<body>
My web site is alive!
</body>
</html>
$ git commit index.html
因为这个文件已添加到版本库里里,没有必要再把这个文件告诉索引;此在,当在命令行里直接提交一个命名的文件时,文件的变更会自动捕捉!而使用没有命名文件的一般 git commit 就不会在这种情况下起作用。
当你的编辑器出现时,输入一条提交记录,"Convert to HTML",然后推出编辑器。现在版本库里有两个版本的 index.html了。
Convert to HTML
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# Explicit paths specified without -i nor -o; assuming --only paths...
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.html
#
查看提交
git log 命令会产生版本库里一系列单独提交的历史
$ git log
commit a5e8a114098e5144861fa9642ebc90a29abf0d66
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 22:00:43 2017 +0800
Convert to HTML
commit 55e68997f60fc626ad37205c12aac818d98bbcbd
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 21:49:32 2017 +0800
Initial contents of public_html
条目按照从最新到最老的顺序罗列出来;每个条目显示了提交作者的名字和 email 地址,提交日期,变更的日志信息和提交的内部识别码。
为了查看特定提交的更加详细的信息,可以使用 git show 命令带一个提交码。
git show 55e68997f60fc626ad37205c12aac818d98bbcbd
commit 55e68997f60fc626ad37205c12aac818d98bbcbd
Author: Tucci Luo <uetucci@163.com>
Date: Wed Dec 20 21:49:32 2017 +0800
Initial contents of public_html
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..34217e9
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+My website is alive!
如果在执行 git show 命令的时候没有显示指定提交码,它将只显示最近一次提交的详细信息。
另一种查看方式是使用 show-branch,提交当前开发分枝简介的但航摘要。
$ git show-branch --more=10
[master] Convert to HTML
[master^] Initial contents of public_html
参数"--more=10"表示额外10个版本(在默认显示一个基础的上在多显示10个),master这个名字是默认的分支名。
查看提交差异
为了查看 index.html 的两个版本之间的差异,使用两个提交的全 ID 名并且运行 git diff。
$ git diff 55e68997f60fc626ad37205c12aac818d98bbcbd \
a5e8a114098e5144861fa9642ebc90a29abf0d66
diff --git a/index.html b/index.html
index 34217e9..8638631 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,5 @@
+<html>
+<body>
My website is alive!
+</body>
+</html>
按照惯例,名为 55e68997f60fc626ad37205c12aac818d98bbcbd 的第一次修订版本是早起版本,名为 a5e8a114098e5144861fa9642ebc90a29abf0d66 的第二次修订版本是较新的版本。因为,每行新内容前面都有一个加号(+)。
版本库内文件的删除和重命名
从版本库里删除一个文件与添加一个文件是类似的,除了使用的命令是 git rm 。 假设在你的网站里有一个不再需要的文件:poem.html,你可以这样做。
$ cd ~/public_html
# ls
index.html poem.html
$ git rm poem.html
rm 'poem.html'
$ git commit -m "Remove a poem"
[master 451bd56] Remove a poem
1 file changed, 1 deletion(-)
delete mode 100644 poem.html
和添加操作一样,删除操作也需要两步: git rm 表示你想要删除这个文件的意图并暂存这个变更,接着 git commit 在版本库里实现这个变更。同样,可以省略 -m 选项,然后在你最喜欢的文件编辑器中以交互方式输入日志消息。
可以通过git rm 和 git add 组合命令来间接为一个文件重命名,也可以更快而直接地通过 git mv命令来做到。这里是前者的一个例子。
$ mv foo.html bar.html
$ git rm foo.html
rm 'foo.html'
$ git add .bar.html
在这个序列里,必须先执行 mv foo.html bar.html,以防 git rm 命令会把 foo.html 从文件系统中永久删除
这是使用 git mv 的相同操作
git mv foo.html bar.html
在任一情况下,暂存的变更必须随后进行提交。
git commit -m "Moved foo to bar"
Create commit 8805821: Moved foo to bar
1 filles changed, 0 insertions(+), 0 deletions(-)
rename foo.html => bar.html (100%)
Git 在对文件的移动操作上鱼与其他同类系统不同,它利用一个基于两个文件版本内容相似度的机制。
创建版本库副本
如果按照上述步骤操作,并且在 ~/public_html 目录中已经建立了一个初始版本库,就可以通过 git clone 命令创建一个完整的副本,或叫克隆。
在主目录里建立一个副本,并命名为my_website
$ cd ~
$ git clone public_html my_website
虽然这个两个 Git 版本库现在包含相同的对象、文件和目录,但是还有一些细微的差别。如果你想要探索其中的不同之处,可以使用一下这些命令。
$ ls -lsa public_html my_website
$ diff -r public_html my_website
在这样的一个本地文件系统中,使用 git clone 命令来创建一个版本库副本和使用 cp -a 或 rsync 非常相似。但是,Git 支持一组丰富的版本库源,包括网络名。
一旦复制了一个版本库,就有修改这个复制版本、做出新的提交、查看它的日志和历史等。这是一个有着完整历史等版本库。
配置文件
Git 的配置文件全都是简单的.ini文件风格的文本文件。
Git支持不同层次的配置文件。按照优先级递减的顺序,它们如下所示。
.git/config
版本库特定的配置设置,可用 --file 选项修改,是默认选项。这些设置拥有最高优先级。
~/.gitconfig
用户特定的配置设置,可用 --global 选项修改。
/etc/gitconfig
这是系统范围的配置设置,如果你有它的UNIX文件写权限,你就可以用 --system 选项修改它。这些设置的优先级最低
例如,要建立一个作者名和 email 地址,用于你对所有版本库的所有提交,可以用 git config --global 命令给在 $HOMT=E/.gitonfig 文件里的 user.name 和 user.email 赋值。
$ git config --global user.name "Jon Loeliger"
$ git config --global user.email "Jdl@example.com"
或者,为了设置一个版本库特丁的名字和 email 地址,覆盖 --global 的设置,只需要省略 --global 标志。
$ git config user.name "Jon Loeliger"
$ git config user.email "jdl@special-project.example.com"
使用 git config -l 列出在整组配置文件里共同查找的所有变量的设置值。
# 新建一个空版本库
$ mkdir /tmp/new
$ cd /tmp/new
$ git init
# 设置一些配置值
$ git config --global user.name "Jon Loeliger"
$ git config --global user.email "jdl@example.com"
$ git config user.email "jdl@special-project.example.com"
$ git config -l
user.name=Jon Loeliger
user.email=jdl@example.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
user.email=jdl@special-project.example.com
因为配置文件只是简单的文本文件,所以可以通过cat命令来查看其内容。也可以通过你最喜欢的文件编辑器来编辑它。
可以使用 --unset 选项来移除设置。
$ git config --unset --global user.email
配置别名
如果你经常输入一条常用而复杂的 Git 命令,可以考虑为它设置一个简单的 Git 别名。
$ git config --global alias.show-gragh \
'log --graph --abbrev-commit --pretty=nonline'
Git-起步的更多相关文章
- (三)Java工程化--Git起步
GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...
- 【转】Git详解之一:Git起步
原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后 ...
- Git详解之一 Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git详解之一:Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git 学习之git 起步(一)
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- Git起步--git安装与初次运行git前配置
在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安 ...
- 让你不再纠结GitHub:Git起步
一.关于版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.我们通常仅对保存着软件源代码的文本文件做版本控制,但实际上,你可以对任何类型的文件进行版本控制. 采用版本控制 ...
- 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程
1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...
- git起步
关于版本控制 什么是版本控制?为什么要版本控制? 版本控制是记录文件内容变化,以便在将来查阅特定版本的系统.有了版本控制,我们就可以将某个文件或是整个项目回退到之前的某个时间段,查看现在和之前相比项目 ...
- Git学习1:Git起步
本系列文章部分原理和命令相关内容是从 https://git-scm.com/book/zh/v2 摘录,软件实际使用是总结自己的实践经验成文. 1. 关于版本控制 版本控制是一种记录一个或若干文件内 ...
随机推荐
- JAVA爬虫---验证码识别技术(一)
Python中有专门的图像处理技术比如说PIL,可以对验证码一类的图片进行二值化处理,然后对图片进行分割,进行像素点比较得到图片中的数字.这种方案对验证码的处理相对较少,运用相对普遍,很多验证码图片可 ...
- It's the loneliest feeling not to know who you are.
It's the loneliest feeling not to know who you are.最孤独的感觉莫过于不知道自己是谁.
- Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程
之前写过俩相关的教程,最近发现插件官方更新了不少内容,所以也更新一篇Firebase Admob Unity3d插件的教程,希望能帮到大家. Firebase Admob Unity3d插件是一个Un ...
- Jquery里面的$(this)和this, 有什么区别
当你用的是jquery时,就用$(this),如果是JS,就用this $(this).html( $(this).html() + " BAM! "); 这个里的html()是J ...
- 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:10.项目介绍之架构(2)
欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 前面我们讲到<迷你微信>服务器端的主架构,现在我们来描述一下它的模块详细信息. 网络模块 从上图我 ...
- 使用NIO快速复制Java文件
package com.test.test; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputS ...
- SQL Server(第二章) 字符串函数、日期时间函数、转换函数
--1.CONCAT 函数:字符串连接(支持sql server2012 SQL规则 如果与NULL连接返回NILL) SELECT empid,CONCAT(firstname,lastname) ...
- kubernetes发布解释型语言应用的最佳实践
说明 k8s在发布编译型语言的应用时,几乎不用多考虑,就会选择将编译好jar/war包(java语言)或者二进制文件(golang/c++)直接打到镜像当中,生成新的应用镜像,然后将镜像推到镜像仓库, ...
- FPGA工具篇——编辑器Notepad++
body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLi ...
- IOS 绘制画画板(封装上下文)
封装上下文 UIImage (CaptureView).h / .m @interface UIImage (CaptureView) + (UIImage *)captureImageWithVie ...