2 git基础
- 学完本章,能配置并初始化Git仓库、开始或停止 、跟踪文件、暂存或者提交更改
- 如何让Git忽略某些文件和文件模式,如何快速撤销错误操作
- 如何浏览项目版本历史并査看版本之间的差异
- 如何向远程仓库推送或从中拉取数据
2.1获取Git仓库
- 建立Git项目
- 有两种
- 把现有的项目或目录导入到Git
- 从服务器上克隆现有的Git仓库
2.1.1 现有目录中初始化Gt仓库
-
要想在Git中对现有项目进行跟踪管理,只需进入项目目录并输入:
-
git init
-
这创建一个名为.git的子目录
-
这个子目录包含构成Git仓库骨架的所有必需文件。
-
但此刻Gi尚未跟踪项目中的任何文件。
- (.git日录中具体包含哪些文件的详细信息,看10章
-
如果你打算着手对现有文件(非空目录)版本控制,
- 就应该开始跟踪这些文件并进行初次提交。
-
对需要跟踪的文件执行几次git add,然后输入 git commit即可
- 现在,你的Git仓库已经包含了这些被跟踪的文件并初次提交。
2.1.2克隆现有仓库
- 获取现有仓库的一份副本,用 git clone
- 如果你熟悉其他版本控制系统(如 Subversion),就会注意到这个命令是“ clone”而不是checkout"
- 这是一个重要差异、
- Git会对服务器仓库的几乎所有数据复制,不只复制当前工作目录
- git clone默认从服务器上把整个项目历史中每个文件的所有历史
版本都拉取下 - 如果你的服务器磁盘损坏,
- 你通常可以用任何客户端计算机上的Git仓库副本恢复服务器
- [这样,服务器端的钩子设置( server- side hook)也许会丢失,
- 但全部的版本数据都会恢复如初,
- 4章有详述
- 克隆仓库用 git clone[url]。
- 克隆Git的链接库 Libgit2,可以像下面这
样做:
- 这创建一个名为 libgit2的新目录,并在其中初始化.git目录,然后将远程仓库中的所有数据拉取到本地并检出最新版本的可用副本。
- 进入libgit2,看到所有项目文件已经准备就绪。
- 将项目克隆到其他名字的目录中
- Git可用几种不同的协议传输数据。
- 上一个例子使用的是htps://协议,
- 也可用git://协议
- SSH传输协议
- [email protected]:path/to/repo.git
- 4章讲到可用来访问Git仓库的所有方法
2.2在Git仓库中记录变更
- 你现在有一个真正的Git仓库并检出了项目文件的可用副本
- 做一些更改,当项目到达某个需要记录的状态时向仓库提交这些变更的快照
- 工作目录下的每一个文件都处之一
- 已跟踪(tracked)
- 未跟踪
- 已跟踪的文件指上一次快照中包含的文件
- 文件分未修改、已修改或已暂存
- 未跟踪:
- 工作目录中除去已跟踪文件之外的所有文件,
- 既不在上一次快照中,也不在暂存区中的文件
- 刚刚完成克隆时,所有文件的状态都是已跟踪且未修改的,
- 因为你刚把它们检出,没做出过任何改动
- 如果修改了文件,它们在Git中的状态就变成已修改
- 意味着自从上次提交以来文件変化
- 接下来要把这些已修改的文件添加到暂存区,
- 提交所有已暂存的变更,随后重复这过程。
2.2.1查看当前文件状态
- 检査文件所处状态的主要工具是 git statusi命令。
- 克隆后立即执行,看到类似下面
- 工作日录下没有任何已跟踪的文件被修改过。
- Git也没有找到任何未跟踪的文件,否则这些文件会被列出。
- 还显示当前所处分支,告诉你现在所处的本地分支与服务器上的对应的分支没有出现偏离。
- 目前一直处在默认的分支。
- 3章详细讲述分支和引用
- 把README添加到项目。
- 如果之前项目中不存在这个文件,这次git status就会看到这个未跟踪的文件:
- README处未跟踪状态,这个文件显示在
Untracked files"(未跟踪的文件)条目下。 - 未跟踪的文件就是Git在上一次快照(提交)中没有发现的文件。
- Git不主动把这些文件包含到下一次提交的文件范同,
- 除非你明确告诉Git你需要跟踪这些文件。
- 这样做是为了避免你不小心把编译生成的二进制文件或者其他你不想跟踪的文件包含进来。
- 需要让Git跟踪该文件,才能将 README加入。
2.2.2跟踪新文件
-
git add让Git开始跟踪新的文件。
-
git add README
-
重新执行查看项目状态的命令,可看到README已处于跟踪状态,并被添加到暂存区等待提交:
- “ Changes to be commited"下列出已暂存的文件
- 如果现在提交,那之前执行git add时的文件版本就会被添加到历史快照
- 早先执行git init时,你执行的下一个命令就是git add(files)
- 这条命令就让Git开始跟踪工作目录下的文件
- git add接受一个文件或日录的路径名作为参数。
- 参数是目录,递归添加该目录下的所有文件