赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
12、命令指南
11、单人团队:连接远程仓库
10、单人团队:使用标签
9、单人团队:在仓库中添加更改
8、单人团队:使用分支工作
7、单人团队:创建本地仓库
6、单人团队:基于 issue 的版本控制
5、工作流
4、分支策略
3、访问模型
2、项目治理
1、团队作战
7、单人团队:创建本地仓库
资源编号:76628
Git团队协作
书籍
热度:33
当你在Git中创建一个新的仓库时,一般会从以下三个起点之一开始创建。 • 一个克隆的仓库 • 一个文件未被跟踪的文件夹 • 一个空目录 在本节中,你将会学到如何使用这三种方法创建一个新的仓库。 开始时,创建一个文件夹,用于存储你所有的样例仓库(例 5-1) 。你可以选择将这个文件夹放在你的桌面上、你的 home 目录中, 或是其他什么地方。 Git 不关心这个文件夹的位 置,只要你自己记得这个文件夹的位置即可。 例 5-1 在 home 目录下创建一个项目目录 ``` $ mkdir learning-git-for-teams $ cd learning-git-for-teams ``` # 5.2.1 克隆已有的项目 在代码托管系统(例如 GitLab 或 GitHub)上, 当你访问一个项目页面时, 通常能够找到 一个选项来将所有文件下载为 .zip 压缩包,或者创建一个仓库的克隆。这些选项通常都在 一起,但并非一定在一起。图 5-2 显示了 GitLab 中仓库 URL 的地址。 ![image.png](http://file.handsomemark.com/file/2020/05/15/67e61b4c-9677-11ea-b6ea-00163e12d51c.png) 图 5-2:克隆仓库使用的 URL 为了下载一个项目的副本, 你将会使用 clone 命令, 如例 5-2 显示。 与下载压缩包不同, 创建项目克隆将会下载仓库中所有文件的副本及其提交历史,它还会记住你下载代码的地 方,将远程代码托管服务器设置为跟踪仓库。不要担心,它不会永久保持连接,它只是收 藏了这个位置,以备你以后想要检查更新,并下载到你的本地仓库。 一个项目只需要克隆一次。一旦项目下载完成后,你将会使用一系列不同的命令来使它保 持同步。在第 7 章中,你将会学到 clone 命令的不同使用方式。在本章中,我们只需要用 它来抓取项目的一份快照,以使你可以在某个起点上开始工作。 例 5-2 创建“Git 团队协作”仓库的一个克隆 ``` $ git clone https://gitlab.com/gitforteams/gitforteams.git ``` 接下来,你的命令行窗口中将会出现下面的输出。 ``` Cloning into 'gitforteams'... remote: Counting objects: 1040, done. remote: Compressing objects: 100% (449/449), done. remote: Total 1040 (delta 603), reused 915 (delta 538) Receiving objects: 100% (1040/1040), 9.49 MiB | 1.68 MiB/s, done. Resolving deltas: 100% (603/603), done. Checking connectivity... done. ``` 恭喜你!你已经成功克隆了你的第一个 Git 仓库。你可以在这个目录中随意折腾。如果你 把这个目录弄得面目全非,删除文件夹并重新运行 clone 命令即可。 现在,在有了这个目录之后,你同样拥有了本书需要的所有帮助资料。你可以浏览这些帮 助文件,寻找隐藏的彩蛋,随意找些什么东西开始看,这样在你学到更多高级命令时不必 担心会制造出奇怪的问题,或是摧毁你自己的工作。 # 5.2.2 将已有的项目迁移至 Git 如果我第一次参与软件项目,我倾向于将文件打包下载,然后在软件第一次导入的某个时 间点开始做版本管理。我将会简明扼要地推进工作,做一个棘手的自我介绍,讲述我要怎 样保持开发者最初想要的样子。 为了比较你正在运行的命令的作用,请再下载“Git 团队协作”仓库,不过这次是从你刚 克隆过的那个仓库中下载一个压缩包,步骤如下所示。 (1) 访问 https://gitlab.com/gitforteams/gitforteams。 (2) 找到并下载项目的压缩包。 (3) 解压项目,放到你为本书准备的项目目录下。因为你在这个目录中已经有了一份克隆的 文件副本,所以你应该将这个新建的文件夹命名为 gitforteams-zip。 你可以在任何文件夹下使用初始化命令 init 创建一个 Git 仓库,如例 5-3 所示。 Git 将会感 知到这个目录中的所有文件,包括子目录,从而确保你是在项目的根目录下运行 init 命令。 例5-3 初始化目录的版本控制 ``` $ git init ``` 你将会看到类似以下内容的一条消息。 ``` Initialized empty Git repository in /Users/emmajane/gitforteams/gitforteams-zip/.git/ ``` 系统并没有立即将文件加入仓库。这是 Git 的一个特性,因为它同样允许你忽略文件,你 需要主动告诉它你想要跟踪哪些文件。如果存在相关的下一个步骤, Git 几乎总是会在状态(status)消息中显示有用的建议。你应该养成经常使用 status 命令的习惯,就像在文 字处理程序中使用保存那么频繁。 这个命令不会保存你的工作, 但它让你知道当前仓库 中发生了什么。知道仓库中发生了什么是理解 Git 的关键。快去查看你的仓库的当前状态 (例 5-4) 。 例 5-4 检查仓库的当前状态 ``` $ git status ``` Git告诉你,下一步是添加你想要跟踪的文件,因为你刚刚初始化了仓库,如下所示。 ``` On branch master Initial commit Untracked files: (use "git add
..." to include in what will be committed) [ lots of files listed here ... ] nothing added to commit but untracked files present (use "git add" to track) ``` 将文件导入 Git 分为两个步骤。尽管你最初会觉得有些厌烦,这个功能允许你在工作目录 中同时进行多个无关的更改。更改可以被暂存在索引(index)的一组提交中,每组都有一 个不同的提交消息。我们希望添加工作目录中的所有文件,因为这是我们第一次导入文件 (例 5-5) 。 例 5-5 将仓库中所有文件添加至暂存区 ``` $ git add --all ``` 同样,可以使用 status 命令来检查当前状态。这个命令的输出将会提示你这些文件已经被 暂存并已准备好提交,如下所示。 ``` On branch master Initial commit Changes to be committed: (use "git rm --cached
..." to unstage) new file: [ lots of files listed ... ] ``` 现在, 你的文件已经添加完毕, 你可以使用 commit 命令将你当前的状态保存到仓库 (例 5-6) 。 例 5-6 将所有暂存的文件提交至仓库 ``` $ git commit -m "Initial import of all project files." ``` 此时会在屏幕上输出一个较长的提交确认信息,提醒你已经将这些文件加入你的仓库。你 的项目文件现在已经处于版本控制下。 # 5.2.3 初始化空项目 在我们教学 Git 时,从一个什么都没有的空目录开始是最容易的,因为讲师和学生很容易 从一个相同的起点开始。下面这个练习能让你轻松地初识 Git。 (1) 创建一个新的空文件夹,如下所示。 ``` $ mkdir empty-repository ``` (2)进入新创建的文件夹,如下所示。 ``` $ cd empty-repository ``` (3) 运行Git初始化命令,如下所示。 ``` $ git init ``` (4)确认已添加隐藏的仓库文件夹,如下所示。 ``` $ ls -al ``` 在Windows上的命令如下所示。 ``` dir ``` 如果你看到了一个新的隐藏文件夹 .git, 那么你的仓库已经成功创建。这个文件夹将会包 含你仓库中所有更改的记录。这个文件夹里没有什么可怕的东西,但如果你删除了它,那 么系统将无法继续跟踪你的项目。也就是说,你将不再能够在你的仓库中恢复任何文件之 前的版本,并将丢失仓库中所有的提交消息,而文件当前的状态也将不可变。 # 5.2.4 查看历史记录 一旦你完成了仓库中的第一个提交,就可以开始查看历史记录了。当然,你的项目历史是你 已经完成的工作和其他协作者完成的工作的组合。如果你从未下载过开源项目,那么几乎感 受不到协作的存在,但它确实存在。协作可以简单到只是在别人的工作上添加你的更改。 要查看仓库中产生的更改,请使用 log 命令(例 5-7) 。默认情况下,这个命令允许你查看 本地仓库当前签出分支中的每个提交的提交消息和作者信息。 例5-7 使用 log 命令查看仓库历史记录 ``` $ git log ``` log 命令将会按时间倒序输出仓库中提交消息的完整历史记录。 如果你只产生了一条提交消息, 也就是最初的一次导入, 那么只有一条消息会被显示出 来,如下所示。 ``` commit fa04c309e3bb8de33f77c54c1f6cc46dc520c2ca Author: emmajane
Date: Sat Oct 25 12:44:39 2014 +0100 Initial import of all project files. ``` 但如果你在一个更完善的代码库上工作,那么代码库里面将会有很多消息。看完这些消息 所需的工作量将会是巨大且复杂的。你可以通过添加 --oneline 参数来缩短消息,只显示 消息的第一行,如例 5-8 所示。按 q 退出。 例 5-8 查看缩短的项目历史记录 ``` $ git log --oneline ```