git学习(一)初始化

“git权威指南”
一些基本命令
$ git add -u # 如果创建了新文件,可以执行 git add -i 命令。
$ git commit
$ git push
从mirror版本库同步数据到本地。只需要一条命令就好了:
$ git pull mirror master
将在家中的提交推送到标记为home的版本库中。
$ git push home
现场版本库创建。直接在需要版本控制的目录下执行Git版本库初始化命令。
$ git init
2. 添加文件并提交
$ git add -A
$ git commit -m “initialized”
3.为初始提交建立一个里程碑:“v1”。
$ git tag v1
4.然后开始在工作区中工作——修改文件,提交。
$ git commit -a

Git修改最新提交的提交说明最为简单,使用一条名为修补提交的命令即可
$ git commit --amend

如果是最新的提交引入了不该提交的大文件::file:winxp.img,操作起来会非常简单,还是用修补提交命令。
$ git rm --cached winxp.img
$ git commit --amend
如果是历史版本,例如是在所标识的提交中引入的文件,则需要使用变基操作。
$ git rebase -i ^

在切换到新的工作分支之前,执行:command:git stash保存工作进度,工作区会变得非
常干净,然后就可以切换到新的分支中了。
$ git stash
$ git checkout <new_branch>
新的工作分支修改完毕后,再切换回当前分支,调用:command:git stash pop命令则可
恢复之前保存的工作进度。
$ git checkout <orignal_branch>
$ git stash pop

分页器
而Git则不用如此麻烦,因为常用的Git的命令都带有一个分页器,当一屏显示不下时启动
分页器。分页器默认使用:command:less命令(:command:less -FRSX)进行分页。
因为:command:less分页器在翻屏时使用了vi风格的热键,如果您不熟悉vi的话,可能会
遇到麻烦。下面是在分页器中常用的热键:字母q:退出分页器。
字母h:显示分页器帮助。
按空格下翻一页,按字母 b 上翻一页。
字母d和u:分别代表向下翻动半页和向上翻动半页。
字母j和k:分别代表向上翻一行和向下翻一行。
如果行太长被截断,可以用左箭头和右箭头使得窗口内容左右滚动。
输入/pattern:向下寻找和pattern匹配的内容。
输入?pattern:向上寻找和pattern匹配的内容。
字母n或N:代表向前或向后继续寻找。
字母g:跳到第一行;字母G:跳到最后一行;输入数字再加字母g:则跳转到对应的
行。
输入!:可以执行Shell命令。
对于默认未提供分页器的Git命令,例如:command:git status命令,可以通过下面任一
方法启用分页器:
在:command:git和子命令(如:command:status)之间插入参数-p或–paginate,
为命令启用内建分页器。如:
$ git -p status
设置Git配置变量,设置完毕后运行相应的命令,将启用内建分页器。
$ git config --global pager.status true
Git命令的分页器支持带颜色的字符输出,对于太长的行则采用截断方式处理(可用左右方
向键滚动)。如果不习惯分页器的长行截断模式而希望采用自动折行模式,可以通过下面
任一方法进行设置:
通过设置LESS环境变量来实现。
$ export LESS=FRX
或者通过定义Git配置变量来改变分页器的默认行为。
$ git config --global core.pager ‘less -+$LESS -FRX’

初始化及创建版本库
在开始Git之旅之前,我们需要设置一下Git的环境变量,这个设置是一次性的工作。即这
些设置会在全局文件(用户主目录下的:file:.gitconfig)或系统文件
(:file:/etc/gitconfig)中做永久的记录。
告诉Git当前用户的姓名和邮件地址,配置的用户名和邮件地址将在版本库提交时作为
提交者的用户名和邮件地址。
注意下面的两条命令不要照抄照搬,而是用您自己的用户名和邮件地址代替这里的用
户名和邮件地址,否则您的劳动成果(提交内容)可要算到作者的头上了。
$ git config --global user.name “Jiang Xin”
$ git config --global user.email jiangxin@ossxp.com

首先建立一个新的工作目录,进入该目录后,执行:command:git init创建版本库。
$ cd /path/to/my/workspace
$ mkdir demo
$ cd demo
$ git init
初始化空的 Git 版本库于 /path/to/my/workspace/demo/.git/
实际上,如果Git的版本是1.6.5或更新的版本,可以在:command:git init命令的后面直
接输入目录名称,自动完成目录的创建。
$ cd /path/to/my/workspace
$ git init demo
初始化空的 Git 版本库于 /path/to/my/workspace/demo/.git/
$ cd demo
从上面版本库初始化后的输出中,可以看到执行:command:git init命令在工作区创建了
隐藏目录:file:.git
$ ls -aF
./ …/ .git/
这个隐藏的:file:.git目录就是Git版本库(又叫仓库,repository)。
:file:.git版本库目录所在的目录,即:file:/path/to/my/workspace/demo目录称
为工作区,目前工作区除了包含一个隐藏的file:.git版本库目录外空无一物。
下面为工作区中加点料:在工作区中创建一个文件:file:welcome.txt,内容就是一行“Hello.”。
$ echo “Hello.” > welcome.txt
为了将这个新建立的文件添加到版本库,需要执行下面的命令:
$ git add welcome.txt
切记,到这里还没有完。Git和大部分其他版本控制系统都需要再执行一次提交操作,对于Git来说就是执行:command:git commit命令完成提交。在提交过程中需要输入提交说明,这个要求对于Git来说是强制性的,不像其他很多版本控制系统(如CVS、Subversion)允许空白的提交说明。在Git提交时,如果在命令行不提供提交说明(没有使用-m参数),Git会自动打开一个编辑器,要求您在其中输入提交说明,输入完毕保存退出。需要说明的是,读者要在一定程度上掌握vim或emacs这两种Linux下常用编辑器的编辑技巧,否则保存退出也会成为问题。
下面进行提交。为了说明方便,使用-m参数直接给出了提交说明。
$ git ci -m “initialized”
[master(根提交) 7e749cc] initialized
1 个文件被修改,插入 1 行(+)
create mode 100644 welcome.txt

从上面的命令及输出可以看出:
使用了Git命令别名,即:command:git ci相当于执行:command:git commit
通过-m参数设置提交说明为:“initialized”。该提交说明也显示在命令输出的第一行中。命令输出的第一行还显示了当前处于名为master的分支上,提交ID为7e749cc[3],且该提交是该分支的第一个提交,即根提交(root-commit)。根提交和其他提交的区别在于没有关联的父提交,这会在后面的章节中加以讨论。命令输出的第二行开始显示本次提交所做修改的统计:修改了一个文件,包含一行的插入。

当工作区中包含了子目录,在子目录中执行Git命令时,如何定位版本库呢?
实际上,当在Git工作区目录下执行操作的时候,会对目录依次向上递归查
找:file:.git 目录,找到的:file:.git目录就是工作区对应的版本
库,:file:.git所在的目录就是工作区的根目录,文件:file:.git/index记录了工作
区文件的状态(实际上是暂存区的状态)。
例如在非Git工作区执行:command:git命令,会因为找不到:file:.git目录而报错。
$ cd /path/to/my/workspace/
$ git status
fatal: Not a git repository (or any of the parent directories): .git
如果跟踪一下执行:command:git status命令时的磁盘访问[4],会看到沿目录依次向上递归的过程。
$ strace -e ‘trace=file’ git status

getcwd(“/path/to/my/workspace”, 4096) = 14

access(“.git/objects”, X_OK) = -1 ENOENT (No such file or directory)
access(“./objects”, X_OK) = -1 ENOENT (No such file or directory)

chdir(“…”) = 0

access(“.git/objects”, X_OK) = -1 ENOENT (No such file or directory)
access(“./objects”, X_OK) = -1 ENOENT (No such file or directory)

chdir(“…”) = 0

access(“.git/objects”, X_OK) = -1 ENOENT (No such file or directory)
access(“./objects”, X_OK) = -1 ENOENT (No such file or directory)
fatal: Not a git repository (or any of the parent directories): .git

那么有什么办法知道Git版本库的位置,以及工作区的根目录在哪里呢?
当在工作区执行:command:git命令时,上面查找版本库的操作总是默默地执行,就好像什么也没有发生的一样。如果希望显示工作区的根目录,Git有一个底层命令可以实现。
在工作区下建立目录:file:a/b/c,进入到该目录中。
$ cd /path/to/my/workspace/demo/
$ mkdir -p a/b/c
$ cd /path/to/my/workspace/demo/a/b/c
显示版本库:file:.git目录所在的位置。
$ git rev-parse --git-dir
/path/to/my/workspace/demo/.git
显示工作区根目录。
$ git rev-parse --show-toplevel
/path/to/my/workspace/demo
相对于工作区根目录的相对目录。
$ git rev-parse --show-prefix
a/b/c/
显示从当前目录(cd)后退(up)到工作区的根的深度。
$ git rev-parse --show-cdup
…/…/…/

command:git config命令参数的区别?
在之前出现的:command:git config命令,有的使用了–global参数,有的使用了–system参数,这两个参数有什么区别么?
执行下面的命令,您就明白:command:git config 命令实际操作的文件了。
执行下面的命令,将打开:file:/path/to/my/workspace/demo/.git/config文件进
行编辑。
$ cd /path/to/my/workspace/demo/
$ git config -e
执行下面的命令,将打开:file:/home/jiangxin/.gitconfig(用户主目录下
的:file:.gitconfig文件)全局配置文件进行编辑。
$ git config -e --global
执行下面的命令,将打开:file:/etc/gitconfig系统级配置文件进行编辑。
如果Git安装在:file:/usr/local/bin下,这个系统级的配置文件也可能是
在:file:/usr/local/etc/gitconfig
$ git config -e --system
Git的三个配置文件分别是版本库级别的配置文件、全局配置文件(用户主目录下)和系统级配置文件(:file:/etc目录下)。其中版本库级别配置文件的优先级最高,全局配置文件其次,系统级配置文件优先级最低。这样的优先级设置就可以让版本库:file:.git目录下的:file:config文件中的配置可以覆盖用户主目录下的Git环境配置。而用户主目录下的配置也可以覆盖系统的Git配置文件。

执行前面的三个:command:git config命令,会看到这三个级别配置文件的格式和内容,原来Git配置文件采用的是INI文件格式。示例如下:
$ cat /path/to/my/workspace/demo/.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
命令:command:git config可以用于读取和更改INI配置文件的内容。使用命
令:command:git config <section>.<key>,来读取INI配置文件中某个配置的键值。例如读取[core]小节的bare的属性值,可以用如下命令:
$ git config core.bare
false
如果想更改或设置INI文件中某个属性的值也非常简单,命令格式是::command:git config <section>.<key> <value>。可以用如下操作:
$ git config a.b something
$ git config x.y.z others
如果打开:file:.git/config文件,会看到如下内容:
[a]
b = something
[x “y”]
z = others
对于类似[x “y”]一样的配置小节,会在本书第三篇介绍远程版本库的章节中经常遇到。
从上面的介绍中,可以看到使用:command:git config命令可以非常方便地操作INI文
件,实际上可以用:command:git config命令操作任何其他的INI文件。
向配置文件:file:test.ini中添加配置。
$ GIT_CONFIG=test.ini git config a.b.c.d “hello, world”
从配置文件:file:test.ini中读取配置。
$ GIT_CONFIG=test.ini git config a.b.c.d
hello, world

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值