2.1获取Git仓库-2.2记录每次更新到仓库
2.1 获取 Git 仓库
获取 Git 仓库通常有两种方式
- 将尚未进行版本控制的本地目录转换为 Git 仓库;
- 从其它服务器 克隆 一个已存在的 Git 仓库。
在已存在目录中初始化仓库
首先进入该项目目录,之后执行
$ git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。
如果此项目中已有文件,应该开始追踪这些文件并进行初始提交。通过 git add 命令来指定所需的文件来进行追踪,然后执行 git commit :
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
克隆现有的仓库
想获得一份已经存在了的 Git 仓库的拷贝就要用到克隆仓库的命令是 git clone <url>命令。当执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。
$ git clone https://github.com/TedXiongfeng/reading-notes.git
这会在当前目录下创建一个名为 “reading-notes” 的目录,并在这个目录下初始化一个 .git 文件夹, 从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。
如果想要自定义本地仓库名字,使用额外参数指定目录名
$ git clone https://github.com/TedXiongfeng/reading-notes.git qwer
目标目录名被指定为 qwer
2.2 记录每次更新到仓库
文件状态变化周期如图
检查文件状态
git status 检查项目里,文件的状态,当提交后且没有新修改的时候如下
$ git status
On branch master
nothing to commit, working tree clean
创建了一个 1.txt 后,Git 告诉你有一个未跟踪的文件,但是不会自动跟踪它
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
1.txt
nothing added to commit but untracked files present (use "git add" to track)
跟踪新文件
git add 跟踪新文件或文件夹
$ git add 1.txt
再查看文件状态,看到 1.txt 已被跟踪,并处于暂存状态
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: 1.txt
Changes to be committed 这行下面的文件都是处于 staged 状态下
暂存已修改的文件
修改了本文件后,再运行 git status
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: 2 Git 基础.md
no changes added to commit (use "git add" and/or "git commit -a")
说明追踪文件内容已经变化,但还没有 staged ,运行 git add ,并查看文件状态
$ git add 2\ Git\ 基础.md
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: 2 Git 基础.md
但是如果这个时候又修改了文件内容
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: 2 Git 基础.md
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: 2 Git 基础.md
文件同时出现在暂存区和非暂存区。 这怎么可能呢? 好吧,实际上 Git 只不过暂存了你运行 git add 命令时的版本。 如果你现在提交,文件的版本是你最后一次运行 git add 命令时的那个版本,而不是你运行 git commit 时,在工作目录中的当前版本。 所以,运行了 git add 之后又作了修订的文件,需要重新运行 git add 把最新版本重新暂存起来
忽略文件
有些文件无需纳入 git 管理,也不希望它们总出现在未跟踪列表。可以创建一个 .gitignore 文件列出需要忽略的文件
.gitignore 的格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略
- 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中
- 匹配模式可以以(/)开头防止递归
- 匹配模式可以以(/)结尾指定目录
- 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); 问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(**)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
最简单的情况下,一个仓库可能只根目录下有一个 .gitignore 文件,它递归地应用到整个仓库中。 然而,子目录下也可以有额外的 .gitignore 文件。子目录中的 .gitignore 文件中的规则只作用于它所在的目录中。
查看已暂存和未暂存的修改
想要知道具体修改了什么地方,可以用 git diff 命令,此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。 也就是修改之后还没有暂存起来的变化内容。若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --staged ( --staged 和 --cached 同义) 命令。 这条命令将比对已暂存文件与最后一次提交的文件差异
提交更新
git commit 会启动选择的文本编辑器来输入提交说明 ( 一般是 vim 或 emacs )
也可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
跳过使用暂存区域
只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交
$ git commit -a -m 'message'
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
$ git rm 1.txt
rm 'Pro Git/2 Git 基础/1.txt'
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: 1.txt
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分看到:
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: 1.txt
修改进入 staged 后,下一次提交时,该文件就不再纳入版本管理了。 如果要删除之前修改过或已经放到暂存区的文件,则必须使用强制删除选项 -f
想把文件从暂存区和仓库中删除,而不影响工作目录应该使用
git rm --cached <file>

浙公网安备 33010602011771号