增加 创建Git仓库。

This commit is contained in:
ZhongyiTong
2015-11-20 14:57:57 +08:00
parent 838b0e4bf3
commit 8bb9cd8c44
2 changed files with 238 additions and 3 deletions

View File

@ -0,0 +1,233 @@
# 创建代码仓库
> BY 童仲毅(geeeeeeeeek@github)
>
> 这是一篇在[Bitbucket教程](https://www.atlassian.com/git/tutorials/setting-up-a-repository)基础上演绎的译文。除非另行注明,页面上所有内容采用知识共享-署名([CC BY 2.5 AU](http://creativecommons.org/licenses/by/2.5/au/deed.zh))协议共享。
这一章简要地带你了解一些最重要的Git命令。在这节中我会向你介绍开始一个新的版本控制项目需要的所有工具后面的几节包含了你每天都会用到的Git操作。
在这节之后你应该能够创建一个新的Git仓库缓存你的项目以免丢失以及查看你项目的历史。
## git init
`git init`命令创建一个新的Git仓库。它用来将已存在但还没有版本控制的项目转换成一个Git仓库或者创建一个空的新仓库。大多数Git命令在未初始化的仓库中都是无法使用的所以这就是你运行新项目的第一个命令了。
运行`git init`命令会在你项目的根目录下创建一个新的`.git`目录,其中包含了你项目必需的所有元数据。除了`.git`目录之外已经存在的项目不会被改变就像SVN一样Git不强制每个子目录中都有一个`.git`目录)。
### 用法
``` shell
git init
```
将当前的目录转换成一个Git仓库。它在当前的目录下增加了一个`.git`文件夹,于是就可以开始记录项目版本了。
``` shell
git init <directory>
```
在指定目录创建一个空的Git仓库。运行这个命令会创建一个名为`directory`,只包含`.git`子目录的空文件夹。
``` shell
git init --bare <directory>
```
初始化一个裸的Git仓库但是忽略工作目录。共享的仓库应该总是用`--bare`标记创建(见下面的讨论)。一般来说,用`—bare`标记初始化的仓库以`.git`结尾。比如,一个叫`my-project`的仓库,它的空版本应该保存在`my-project.git`目录下。
### 讨论
和SVN相比`git init`命令是一个创建新的版本控制项目非常简单的途径。Git不需要你创建仓库导入文件检查正在修改的拷贝。你只需要`cd`到你的项目目录下,运行`git init`你就有了一个功能强大的Git仓库。
但是,对大多数项目来说,`git init`只需要在创建中央仓库时执行一次——开发者通常不会使用`git init`来创建他们的本地仓库。他们往往使用`git clone`来将已存在的仓库拷贝到他们的机器中去。
#### 裸仓库
`—bare`标记创建了一个没有工作目录的仓库,这样我们在仓库中更改文件并且提交了。中央仓库应该总是创建成裸仓库,因为向非裸仓库推送分支有可能会覆盖已有的代码变动。将`—bare`看成是用来将仓库标记为储存设施而不是一个开发环境。也就是说对于所有的Git工作流中央仓库是裸仓库开发者的本地仓库是非裸仓库。
![](https://www.atlassian.com/git/images/tutorials/getting-started/setting-up-a-repository/01.svg)
### 栗子
因为`git clone`创建项目的本地拷贝更为方便,`git init`最常见的使用情景就是用于创建中央仓库:
``` shell
ssh <user>@<host>
cd path/above/repo
git init --bare my-project.git
```
首先你用SSH连入存放中央仓库的服务器。然后来到任何你想存放项目的地方最后使用`—bare`标记来创建一个中央存储仓库。开发者会将`my-project.git` 克隆到本地的开发环境中。
## git clone
`git clone`命令拷贝整个Git仓库。这个命令就像`svn checkout`一样除了”工作副本“是一个完备的Git仓库——它包含自己的历史管理自己的文件以及环境和原仓库完全隔离。
为了方便起见,`clone`自动创建了一个名为`origin`的远程连接,指向原有仓库。这让和中央仓库之间的交互更加简单。
### 用法
``` shell
git clone <repo>
```
将位于`<repo>`的仓库克隆到本地机器。原仓库可以在本地文件系统中或是通过HTTP或SSH连接的远程机器。
``` shell
git clone <repo> <directory>
```
将位于`<repo>`的仓库克隆到本地机器上的`<directory>`文件夹。
### 讨论
如果项目在远程仓库已经设置完毕,`git clone`是用户获取开发副本最常见的方式。和`git init`相似,`clone`通常也是一次性的操作——只要开发者获得了一份工作副本,所有版本控制操作和协作管理都是在本地仓库中完成的。
#### 仓库间协作
这一点很重要你要理解Git中”工作副本“的概念和SVN仓库check out下来的”工作副本“是很不一样的。和SVN不同的是Git不会区分工作副本和中央仓库——它们都是功能完备的Git仓库。
这就似的Git的协作和SVN截然不同。SVN依赖于中央仓库和工作副本之间的关系而Git协作模型是基于仓库和仓库之间的交互的。相对于SVN的提交流程你可以在Git仓库之间`push`或`pull`提交。
![](https://www.atlassian.com/git/images/tutorials/getting-started/setting-up-a-repository/03.svg)
![](https://www.atlassian.com/git/images/tutorials/getting-started/setting-up-a-repository/02.svg)
当然你也完全可以给予某个特定的仓库一些特殊的含义。比如指定某个Git仓库为中央仓库你就可以用Git进行中央化的工作流。重点是这是通过约定实现的而不是写死在版本控制系统本身。
### 栗子
下面这个例子演示用SSH用户名john连接到example.com获取远程服务器上中央仓库的本地副本
``` shell
git clone ssh://john@example.com/path/to/my-project.git
cd my-project
# 开始工作
```
第一行命令在本地机器的`my-project`文件夹下初始化了一个新的Git仓库并且导入了中央仓库中的文件。接下来你`cd`到项目目录,开始编辑文件、缓存提交、和其它仓库交互。同时注意`.git`拓展名克隆时会被去除。它表明了本地副本的非裸状态。
``` shell
git config
```
`git config`命令允许你在命令行中配置你的Git安装或是一个独立仓库。这个命令定义了所有配置从用户信息到仓库行为等等。一些常见的配置命令如下所列。
### 用法
``` shell
git config user.name <name>
```
定义当前仓库所有提交使用的作者姓名。通常来说,你希望使用`--global`标记设置当前用户的配置项。
``` sh
git config --global user.name <name>
```
定义当前用户所有提交使用的作者姓名。
``` sh
git config --global user.email <email>
```
定义当前用户所有提交使用的作者邮箱。
``` sh
git config --global alias.<alias-name> <git-command>
```
为Git命令创建一个快捷方式别名
``` sh
git config --system core.editor <editor>
```
定义当前机器所有用户使用命令时用到的文本编辑器,如`git commit`。`<editor>`参数用编辑器的启动命令如vi替代。
``` sh
git config --global --edit
```
用文本编辑器打开全局配置文件,手动编辑。
### 讨论
所有配置项都储存在纯文本文件中,所以`git config`命令其实只是一个提供便捷的命令行接口。通常你只需要在新机器上配置一次Git安装以及你通常会想要使用`--global`标记。
Git将配置项保存在三个单独的文件中允许你分别对单个仓库、用户和整个系统设置。
- <repo>/.git/config 特定仓库的设置。
- ~/.gitconfig 特定用户的设置。这也是`--global`标记的设置项存放的位置。
- $(prefix)/etc/gitconfig 系统层面的设置。
当这些文件中的配置项冲突时,本地仓库设置覆盖用户设置,用户设置覆盖系统设置。如果你打开期中一份文件,你会看到下面这些:
``` sh
[user]
name = John Smith
email = john@example.com
[alias]
st = status
co = checkout
br = branch
up = rebase
ci = commit
[core]
editor = vim
```
你可以用`git config`手动编辑这些值。
### 栗子
你在安装Git之后想要做的第一件事是告诉它你的名字和邮箱个性化一些默认设置。一般初始的设置过程看上去是这样的
``` sh
# 告诉Git你是谁
git config --global user.name "John Smith"
git config --global user.email john@example.com
# 选择你喜欢的文本编辑器
git config --global core.editor vim
# 添加一些快捷方式(别名)
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.up rebase
git config --global alias.ci commit
```
它会生成上一节中所说的`~/.gitconfig`文件。

View File

@ -3,11 +3,13 @@
**第2篇 从零搭建本地代码仓库** **第2篇 从零搭建本地代码仓库**
这篇完全面向入门者。我假设你从零开始创建一个项目并且想用Git来进行版本控制我们会讨论如何在你的个人项目中使用Git比如如何初始化你的项目如何管理新的或者已有的文件如何在远端仓库中储存你的代码。
- **第1章** [快速指南](https://github.com/geeeeeeeeek/git-recipes/wiki/2.1-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97) - **第1章** [快速指南](https://github.com/geeeeeeeeek/git-recipes/wiki/2.1-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97)
这节完全面向入门者。我假设你从零开始创建一个项目并且想用Git来进行版本控制我们会讨论如何在你的个人项目中使用Git比如如何初始化你的项目如何管理新的或者已有的文件如何在远端仓库中储存你的代码。 - **第2章** [创建代码仓库](https://github.com/geeeeeeeeek/git-recipes/wiki/2.2-%E5%88%9B%E5%BB%BA%E4%BB%A3%E7%A0%81%E4%BB%93%E5%BA%93)
- **第2章** 创建代码仓库 **第3章** 保存你的更改 **第4章** 查看仓库状态 **第5章** 查看以前的提交 **第6章** 回滚错误的更改 **第7章** 重写项目历史 - **第3章** 保存你的更改 **第4章** 查看仓库状态 **第5章** 查看以前的提交 **第6章** 回滚错误的更改 **第7章** 重写项目历史
**第3章 远程团队协作和管理** **第3章 远程团队协作和管理**