Git. Day 1.
不会谈到的:
安装:(略)
初次运行配置:(略)实在不想复制粘贴。
会谈到的:
- 新建本地的repos的过程。
- Clone托管平台上的项目过程。
- 涉及到的指令知识点。
- 遇到的坑和自己的想法。
新建本地repos
在本地新建一个文件夹作为repos,然后在这个目录下右键 GitBash Here
执行
git init #初始化Git的环境
ls #查看当前目录的文件列表
这里我们可以看到多了一个文件夹.git,然后来看下官方的描述:
“所有 Git 需要的数据和资源都存放在这个目录中。不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。”
我暂时将它理解为Git的Runtime Environment ,接下来的文档就开始描述track文件。指令如下
$ git add *.c
$ git add README
$ git commit -m 'initial project version'
对于一个没接触过这些指令的人来说,这里的 README是怎么回事,是怎么来的?其实是把读者想得太高端,这里其实是需要你事先自己在这个目录下新建一个叫README的文件,当然新建的方式有很多种,你可以手动鼠标右键新建,也可以执行下面的命令:
$ vim README #新建一个README文件
$ vi README #编辑这个文件的内容
在编辑完成之后我曾经一度傻呵呵的不知道怎么保存退出,其实编辑好内容之后ESC 或者 ctrl + C 可以结束编辑,然后:wq 保存并且提出注意wq前面是有个:号的。
接上之前所说的,下一条是commit指令,后面的-m "message body"指的是针对这次的提交的说明,这里的提交并不是提交到你的托管服务器上,而是提交到本地。
Clone Repos到本地
官方固定的Clone指令的格式应该是git clone [url] 这个url是你的repos的远程路径,下面是例子
$ git clone git://github.com/dendiSe7enGitHub/testAboutGit.git Testgit
这里最后的Testgit是我给本地repos取的名字,如果不写默认与源同名。这里值得一提的是,在之前搭建hexo的过程中,我已经有clone过很多次项目到本地,但是我都是用的:
$ git clone git@github.com:DendiSe7enGitHub/moreTestAboutGit.git
是不是不一样?这是因为git支持多种传输协议,官方的文档中是git://协议,同时他也支持"http://" http协议和 "user@server:/path.git" SSH协议。具体的分析会在官方API的第四章,暂时还没有看到。
到这里基本上就结束了新建本地仓库和clone远程仓库。
知识点
图 1-1.GIT中文件的状态变化周期
指令及说明:
##########################################
$ git status# 检查当前文件状态
$ git add README # 跟踪新文件
##########################################
#忽略某些文件
$ vim .gitignore#创建一个名为.gitignore的文件
$ vi .gitignore #编辑文件内容
*.[oa] #在提交时忽略.o 或者 .a 的文件
*~ #在提交时忽略.~ 的文件
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
##########################################
git diff --staged 看已经暂存起来的文件和上次提交时的快照之间的差异
##########################################
$ git commit 提交更新
##########################################
$ git commit -a #跳过使用暂存区域
##########################################
$ git rm grit.gemspec #移除文件 从暂存区域移除
坑
碰到的坑:
- 1号坑: 在想要修改某个文件名字时,首先要track到这个文件,指令:
$ git add your_file_name
这个问题是在执行下面的指令时发现的。
$ git mv old_file_name new_file_name #修改文件名字
因为我最开始没有 track 自己新建的这个文件readme.md 所以,在执行重命名操作时,发现 git status之后的提示里面并没有显示之前我对这个文件进行的rename操作。
执行
$ git add readme.md #将文件readme.md 添加到track列表
$ git mv readme.md readme.text #重命名readme.md 为 readme.txt
$ ls #显示当前目录文件列表
这样处理之后发现readme.md 被修改成 readme.txt 然后执行:
$ git status#检查当前文件状态
果然出现了rename的记录。
另外需要知道的是:
#这个命令在执行的时候是分为了三个步骤:
git mv old_file_name new_file_name
#步骤1
git mv old_file_name new_file_name #根据源文件复制后生成新的文件并且命名为new_file_name
#步骤2
$ git rm old_file_name #删除旧文件
$ git add new_file_name #将新文件加入到track列表
之前的操作之所以出错就是因为这里在第一步的时候,因为没有add过源文件,导致无法复制。