Git
官网:https://git-scm.com/book/zh/v2
1. 工作区域的概念
Git
项目的三个工作区域的概念:工作目录、Git
仓库、以及暂存区域。
-
工作目录:
工作目录也叫工作区,即本地仓库的文件夹,肉眼可见的。 -
仓库目录:
在工作区中存在一个隐藏的目录.git
,它就是版本库。 -
暂存区域:
是一个文件,保存了下次将提交的文件列表信息,.git
目录下存在一个index
文件,这就是Git
的暂存区,也成为索引。
基本的 Git
工作流程如下:
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到
Git
仓库目录。
如果 Git
目录中保存着的特定版本文件,就属于已提交状态。如果作了修改并已放入暂存区域,就属于已暂存状态。如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
2. 配置相关
2.1 配置用户
安装完 Git
之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git
提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "wohu"
$ git config --global user.email "wohu@163.com"
再次强调,如果使用了 --global
选项,那么该命令只需要运行一次,之后无论你在该系统上做任何事情, Git
都会使用那些信息。
当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行
--local
选项的命令来配置。
配置的作用域:
- 缺省等同于
--local
git config --local
:只针对某个仓库有效,可以用来配置不同仓库不同的用户名和邮箱git config --global
:对当前用户所有仓库有效git config --system
:对系统所有登录用户有效
显示配置 --list
2.2 检查配置
如果想要检查你的配置,可以使用 git config --list
命令来列出所有 Git
当时能找到的配置。
$ git config --list
user.name=xxx
user.email=xxx
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=xxx
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
credential.helper=store
user.name=xxxx
user.email=xxx
类似的
$ git config --list --local
$ git config --list --global
$ git config --list --system
你可能会看到重复的变量名,因为 Git
会从不同的文件中读取同一个配置(例如:/etc/gitconfig
与 ~/.gitconfig
)。 这种情况下,Git
会使用它找到的每一个变量的最后一个配置。
可以通过输入 git config <key>
来检查 Git
的某一项配置,例如:
$ git config user.name
wohu
2.3 优先级配置
Git
自带一个 git config
的工具来帮助设置控制 Git
外观和行为的配置变量。 这些变量存储在三个不同的位置:
/etc/gitconfig
文件: 包含系统上每一个用户及他们仓库的通用配置。 如果在执行git config
时带上--system
选项,那么它就会读写该文件中的配置变量。 (由于它是系统配置文件,因此你需要管理员或超级用户权限来修改它。)~/.gitconfig
或~/.config/git/config
文件:只针对当前用户。 你可以传递--global
选项让Git
读写此文件,这会对你系统上所有的仓库生效。- 当前使用仓库的
Git
目录中的config
文件(即.git/config
):针对该仓库。 你可以传递--local
选项让Git
强制读写此文件,虽然默认情况下用的就是它。。 (当然,你需要进入某个Git
仓库中才能让该选项生效。)
每一个级别会覆盖上一级别的配置,也就是说优先级由高到底顺序为 --local > --global > --system
, 所以 .git/config
的配置变量会覆盖 /etc/gitconfig
中的配置变量。
2.4 颜色配置
比如,让 Git
显示颜色,会让命令输出看起来更醒目:
$ git config --global color.ui true
2.5 忽略文件配置
我们在 Git
工作区的根目录下创建一个特殊的 .gitignore
文件,然后把要忽略的文件名填进去,Git
在每次进行提交的时候就会自动忽略这些文件。
日常使用中,我们一般不需要从头开始编辑 .gitignore
文件,已经有各种现成的种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://gitcode.net/codechina/gitignore
如果 .gitignore
写得有问题,需要找出来到底哪个规则写错了,可以用 git check-ignore
命令检查:
$ git check-ignore -v 1.exe
.gitignore:2:*.exe 1.exe
Git
会告诉我们,.gitignore
的第 2 行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
还有些时候,当我们编写了规则排除了部分文件时:
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
但是我们发现 .*
这个规则把 .gitignore
也排除了,并且 App.class
需要被添加到版本库,但是被*.class
规则排除了。
这个时候,虽然可以用 git add -f
强制添加进去,但我们建议你可以添加两条例外规则:
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 不排除.gitignore和App.class:
!.gitignore
!App.class
把指定文件排除在 .gitignore
规则外的写法就是 !+文件名
,所以,只需把例外文件添加进去即可。
2.6 配置别名
配置 git status/commit/checkout/branch 的别名,提高输入效率。
比如在使用 git status
命令时,我们可以通过配置别名的方式将其配置为 git st
,这样在使用时是不是就比输入 git status
简单方便很多呢?
我们只需要敲一行命令,告诉 Git
,以后 st
就表示 status
:
$ git config --global alias.st status
当然还有别的命令可以简写,很多人都用 co
表示 checkout
,ci
表示 commit
,br
表示 branch
,配置别名:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
--global
参数是全局参数,也就是这些命令在这台电脑的所有 Git
仓库下都可以使用。
2.7 配置文件
这些自定义的 Git
配置文件通常都存放在当前仓库的 .git/config
文件中:
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@gitcode.net:codechina/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
别名就在 [alias]
后面,要删除别名,直接把对应的行删掉即可。
而当前用户的 Git
配置文件放在用户主目录下的一个隐藏文件 ~/.gitconfig
中:
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
[color]
ui = true
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
2.8 删除配置
git config --global --remove-section user.name
# or
git config --global --unset-all user.name
# or
git config --global --unset user.name
3. 新建git仓库
- 本地有个项目代码写了一段时间了,但还没有用 git 管理起来,现在想用git在本地帮着记录变更的版本。
cd existing_folder (本地进入到项目文件夹内)
git init (执行 init 命令,会创建出 .git 目录)
git add . (把项目文件加入到 git 的暂存区)
git commit -m "Initial commit" (创建第一个 git 的commit )
- 很早之前本地生成了一个 git 的仓库,开发了一段时间,想把这个git仓库提交到公司git服务器新建的project中。
cd existing_repo
git remote add origin git@your_git_server:your_group/your_project.git
git push -u origin --all
git push -u origin --tags