Git(二)—— 从创建仓库到第一次提交全解析

208 阅读2分钟

本文涉及到的命令

# 用户信息配置
$git config --global user.name "zhang"   
$git config --global user.email zhang @example.com
# 查看配置信息
$git config --list
$git config --global user.name
# 在工作目录初始化新仓库
$git init
# 从现有仓库克隆
$git clone [url]
# 将项目添加至远程仓库
$git remote add [shortname] [url]
# 查看文件状态
$git status
# 跟踪文件、将文件添加到暂存区
$git add
# 提交命令,进入文本编辑器方式
$git commit
# 提交命令,简化
$git commit -m ""
# 查看提交历史
$git log

1. 安装 Git

去官网下载安装最新版。

2. 初次运行 Git 前用户信息的配置

需要配置用户名电子邮箱地址。每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,会随更新内容一起被永久纳入历史记录:

$git config --global user.name "zhang"   
$git config --global user.email zhang@example.com

查看配置信息:

$git config --list

查看某项配置信息

$git config --global user.name

git config --global 更改的配置文件就是位于你用户主目录下的 .gitconfig 文件:

[user]
	name = zhang
	email = zhang@example.com
[http]
	postBuffer = 157286400
	lowSpeedLimit = 0
	lowSpeedTime = 999999
[credential "https://gitee.com"]
	provider = generic

3. 创建代码仓库

仓库(repository)是用于保存版本管理所需信息的地方,所有本地提交的代码都会被提交到代码仓库中。

3.1 在工作目录中初始化新仓库

给新建的 Test 项目建立一个代码仓库。先进入Test 目录下,输入:

$git init

这样就完成了创建代码仓库的操作:

image.png

这时会在 Test 目录的根目录下生成一个隐藏的 .git 目录。

如果想要删除本地仓库,只要删除这个目录就行了。

3.2 从现有仓库克隆

从远程仓库克隆项目:

$git clone [url]

比如从 GitHub 克隆项目,随便找到一个项目:

image.png

输入命令克隆该项目到本地:

$git clone https://github.com/facebook/react-native.git

3.3 添加远程仓库

使用命令将本地项目添加到远程仓库:

$git remote add [shortname] [url]
  • <shortname>:是你为远程仓库指定的简写名称,通常默认为 origin,但你可以根据自己的需求来设定。
  • <url>:是远程仓库的地址,可以是HTTP/HTTPS协议的URL,也可以是SSH协议的URL。

可以使用下列命令将项目添加到 Gitee 远程仓库:

$git remote add origin https://gitee.com/username/repository.git

4. 提交更新到仓库

4.1 工作目录中文件的状态

工作目录下文件的两种状态:已跟踪未跟踪

  • 已跟踪文件:指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是:
    • 未更新
    • 已修改
    • 已放入暂存区
  • 未跟踪文件:所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。(理解为新建的文件)。

使用命令确定文件处于什么状态:

$git status

克隆仓库初次打开项目:

image.png

新建一个 Test.java 文件,再次检查状态,显示该文件未跟踪:

image.png

4.2 跟踪新文件

使用命令跟踪新文件:

$git add app/src/main/java/com/example/Test.java

add 后指明要跟踪的文件或目录路径,可以理解为将目标文件快照放入暂存区域。 再次检查状态,此时文件已被跟踪,只要在 “Changes to be committed” 这行下面的,就说明是已暂存状态。:

image.png

4.3 将修改后文件加入暂存区

修改已跟踪文件 User.java,再次查看状态:

image.png

文件 User.java 出现在 “Changes not staged for commit” 这行下面,说明已跟踪文件的内容发生了变化,但还没有放到暂存区。

要暂存这次更新,需要运行 git add 命令(根据目标文件的状态不同,此命令的效果也不同:可以用它开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等)。

现在使用 git addUser.java 放到暂存区,然后再查看状态:

image.png

4.4 提交暂存区中文件

将暂存区域提交之前,一定要通过 git status 确认是否有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。然后再运行提交命令:

$git commit

会进入到文本编辑器页面vim:

image.png vim 基本操作

  • 启动 vim 时,默认进入的是正常模式
  • 按下 i 键进入 INSERT 模式,可以在开头输入你的提交说明。
  • 然后按下 Ctrl + C 键,可以从 INSERT 模式回到正常模式
  • 接着按 : 进入命令模式,输入 wq 并按下回车,可以保存你的更改并退出vim。

保存更改并退出 vim 后: image.png

可以简化上述步骤,使用一行命令直接提交:

$git commit -m "first commit"

"" 中填入提交信息,就可以直接提交。

5. 忽略某些文件

Git 提供了一种可配性很强的机制,如果用户不想将一些文件或目录纳入版本控制范围,允许用户将这些排除在版本控制之外。

Git 会检查代码仓库的目录下是否存在一个.gitignore 文件,若存在,就一行行读取这个文件中的内容,并把每一行指定的文件或目录排除在版本控制之外。

配置 .gitignore 文件,为了避免提交一些无用的文件。

.gitignore 只能忽略那些原来没有被追踪(tracked)的文件,若某些文件已经被纳入了版本管理中,则修改 .gitignore 是无效的。

创建项目时会自动创建两个 .gitignore 文件,一个在根目录下,一个在 app 模块下。

比如,app 模块下的所有测试文件都是给我自己使用的,并不想把他们添加到版本控制中,就可以修改 app/.gitignore 文件中内容:

/build
/src/test
/src/androidTest

.gitignore 中可以使用通配符“*”。

常见例子:

# 忽略所有的 .bin 文件
*.bin
# 不忽略目录下的 a.bin
!a.bin
# 不忽略 obj 目录下的 a.bin
!/obj/a.bin
# 忽略某目录 .txt, 不包括子目录 .txt
doc/*.txt
# 忽略某目录 .txt, 包括子目录 .txt
doc/**/*.txt
# 忽略当前目录.c,不忽略子目录.c
/*.c
# 忽略当前路径下的 Proj 文件夹,该文件夹下的所有内容都会被忽略
Proj/
# 忽略 Proj 文件夹子目录 Obj 文件夹里的所有文件
Proj/Obj/
# 忽略根目录下的 bin 文件。
/bin: 
# 忽略/foo, a/foo, a/b/foo 等文件
**/foo: 
# 忽略当前路径的 config.php 文件
config.php: 

6. 查看提交历史

查看提交历史:

$git log

默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。

image.png