Git 资料参考:
http://www.runoob.com/git/git-tutorial.html
GitHub 资料参考:
http://www.ruanyifeng.com/blog/2014/06/git_remote.html
所有操作都是基于 CentOS7,其他系统仅供参考。
1. 简介
Git 和 SVN 不一样,Git 是一个开源的、分布式的版本控制系统,没有服务器端。之所以要在服务器上安装 Git,是为了建立一个基准,并通过公网环境保证 24 小时随时可以同步。
2. 安装配置
下载地址:
https://git-scm.com/downloads
https://github.com/git/git/releases
https://www.kernel.org/pub/software/scm/git/
一 安装
Git 项目托管在 GitHub,因此所有的可下载的大文件都会放在亚马逊的 s3 服务器上。如果发生“s3.amazonaws.com 的响应时间过长”等问题,直接把下载地址的 HTTPS 协议改为 HTTP 即可恢复下载!!!
1) Linux下
- CentOS:
CentOS 自带 Git,我的 7.x 版本自带的 Git 版本为 1.8.3.1。
卸载:yum remove git
安装:yum install git
查看版本:git --version
- Ubuntu(没试过):
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
$ apt-get install git-core
或者直接:$ apt-get install git
2) Windows下
下载对应的 Windows 版本软件,安装即可。
二 配置
1)Git 环境变量
Git 自带的 config 工具用来配置或读取相应的环境变量。
Git 的环境变量分为三种:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目的 Git 目录中的配置文件(也就是工作目录中的
.git/config
文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以.git/config
里的配置会覆盖/etc/gitconfig
中的同名变量。
2)用户信息
配置用户名和电子邮件地址:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
3)文本编辑器
设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::
$ git config --global core.editor emacs
4)差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
$ git config --global merge.tool vimdiff
Git 可以理解 kdiff3,tkdiff,meld,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,和 opendiff 等合并工具的输出信息。
也可以指定使用自己开发的工具。
5)查看配置信息
要检查已有的配置信息,可以使用 git config –list 命令:
$ git config --list
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。
这些配置我们也可以在 ~/.gitconfig
或 /etc/gitconfig
看到,如下所示:
vim ~/.gitconfig
也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
$ git config user.name
6)关于 Linux 和 Windows 的换行符
在 Linux 中,换行符是 \r
,而在 Windows 中,换行符是 \r\n
。
Git 的 Windows 客户端在安装的时候回提示你是否自动转换换行符(core.autocrlf
,下载时转为 \r\n
,提交时转为 \r
),一般没太大影响。如果安装完成后,想切换这个选项,可以通过设置为 false 关闭这个自动转换功能:
git config --global core.autocrlf false
如果关闭换行符自动转换功能,最好开启换行符检查功能(core.safecrlf
,在提交时检查文件是否混用了不同风格的换行符),选项如下:
- false - 不检查
- warn - 在提交时检查并警告,但不影响提交
- true - 在提交时检查,如果发现混用则拒绝提交,最好用这个
git config --global core.safecrlf true
3. Git 基本使用
如果只是自己使用,可以用 root 用户访问 Git 仓库。但多人使用时,为了保证最小权限,需要建立 Git 账户,把每个用户的 SSH 公钥放入 Git 账户的 ~/.ssh/authorized_keys
文件,从而通过 Git 账户访问仓库。
一 基本使用
1)指定 Git 仓库
通过 git init
命令可以将当前目录初始化为 Git 仓库。
通过 git init /new/repo
可以将指定目录初始化为 Git 仓库。
创建新仓库
远端已经创建仓库时,通过 git clone
命令可以简单的在本地创建副本:
git clone https://gitlab.kikakika.com/lihongfeng/user-create.git
cd user-create
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
使用已经存在的项目创建仓库
本地的文件已经存在了,但是没有关联任何仓库,此时可以先通过 git init
初始化后,再用 git remote add origin
关联远端仓库:
cd existing_folder
git init
git remote add origin https://gitlab.kikakika.com/lihongfeng/user-create.git
git add .
git commit -m "Initial commit"
git push -u origin master
使用已经存在的 Git 仓库
本地的 Git 仓库已经存在且已经关联了远端仓库,先用 git remote rename origin other-name
将仓库的 origin
标记改为其他名称,再通过 git remote add origin
关联远端仓库:
cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.kikakika.com/lihongfeng/user-create.git
git push -u origin --all
git push -u origin --tags
2)添加新文件
git add
可以添加单个或多个用空格分隔的文件,支持通配符(使用通配符时需要用引号引起来)。
git add file
git add test1.txt test2.txt
git add '*.txt'
因为 Linux 用 LR (line feed)作为换行符,Windows 用 CRLF(carriage return 和 line feed)。当在不同系统之间传输代码时会有个 warning:
Administrator@DESKTOP-17O04O0 MINGW64 /d/lihongfeng/workspace/first (master)
$ git add ./
warning: LF will be replaced by CRLF in .drone.yml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in main.go.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in main_test.go.
The file will have its original line endings in your working directory.
可以在 git 的命令行中使用下面的命令屏蔽这个警告:
git config core.autocrlf true
3)删除文件
git rm file
3)提交文件
git commit -m "my files"
必须先用 git add
添加要提交的文件,所有通过 git add
添加的文件会一次全部提交。提交之后,文件才真正的进入 Git 仓库。
-m
参数后加注释字符串,也可以不加 -m
参数,会通过编辑器来写注释。
-a
参数可将所有被修改或已删除的且已经被git管理的文档提交到仓库中。
4)从远端服务器获取库
git clone ssh://example.com/~/www/project.git
6)获取远端服务器的更新
git pull
5)推送到服务器
git push ssh://example.com/~/www/project.git
6)查看 Git 状态
通过 git status
命令可以查看以下信息:
- 当前在哪个分支,一般是 master 分支
- 如果有变更,是否已经通过
git add
命令添加要 commit 的文件 - 变更过的文件
git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
上面例子中出现了 Changes not staged for commit:
,表示没有要 commit
的文件。
7)查看文件修改的部分
git diff readme.txt
diff --git a/readme.txt b/readme.txt
index 46d4..9db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
8)查看提交日志
git log
显示由近到远的提交日志,可以加 --pretty=oneline
参数只输出 commit id
(版本号) 和提交信息:
git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 delete msg
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add msg
cb926e7ea50ad11b8f9e909c05226233bf755030 first commit
SVN 中的版本号是从 1 开始递增的数组,而 Git 中的版本号是通过 SHA1 计算出来的字符串。这是因为 Git 是分布式的版本控制系统,且允许多个人在同一个仓库中工作。
9)历史命令列表
Git 中,git reflog
记录所有用过的命令。对于所有的 commit
命令,都有 commit id
。
git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
9)版本回退
Git 在内部有个指向当前版本的 HEAD
指针。每次版本回退或者前进,都只是更改 HEAD
指针,仓库中的所有版本都不会变化。
通过 git reset --hard 版本ID
命令回退或前进版本。注意,在版本变更时,文件会自动同步更新。
git reset --hard 3628164
HEAD is now at 3628164 append GPL
4 GitHub
一 简介
GitHub 是一个基于 Git 的代码托管平台,付费用户可以建私人仓库,免费用户只能使用公共仓库(任何人都可以访问)。
你只要在 GitHub 注册了账号,就可以登录进去创建仓库,不再需要在自己的服务器上安装 Git 了。
二 使用
1)注册
github官网地址:https://github.com/
2)安装客户端
下载地址:
https://git-scm.com/downloads
http://gitforwindows.org/
3)配置
首先需要创建 SSH,可以参考这里。
- 打开 Git Bash,进入命令行界面。
- 执行命令
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
,邮箱替换为注册 GitHub 用的邮箱。这个命令最终会产生一个新的 SSH Key。命令执行后,会进入一个交互式界面。 - 输入 Key 的位置。直接回车用默认位置即可。
Enter a file in which to save the key (/c/Users/you/.ssh/id_rsa):
- 输入密码
Enter passphrase (empty for no passphrase): [输入密码,可以为空]
Enter same passphrase again: [再次输入密码]
这里就创建完成了,可以通过命令cat id_rsa.pub
查看内容。
- 在 GitHub 的个人中心,把刚创建的 Key 复制进来,注意保持格式。
- 验证,在 Git Bash 命令行界面中执行以下命令。如果没设置密码,则直接连接上,有设置密码在需要输入密码(提示是否 continue 的话,直接输入yes)。
ssh -T git@github.com
- 设置用户名和邮箱地址
$ git config --global user.name "your name"
$ git config --global user.email "your_email@youremail.com"
4)操作仓库
1. 从 GitHub 仓库克隆
已经在 GitHub 上有远程仓库时,直接克隆到本地即可:
git clone username@host:/path/to/repository
注意这里使用的协议,Git 默认使用的 git://
协议是基于 SSH 的,可以从网站上复制下来。当然也可以使用 https://
协议,速度比较慢且每次都需要输入口令。
这里我的完整命令是:
git clone git@github.com:kikajack/kikajack.github.io.git
2. 创建远程仓库
远程仓库的使用可以 参考这里。
如果仓库已经在本地建好,可以同步到 GitHub 上的远程仓库。步骤如下:
- 在 GitHub 上创建一个空仓库,假设名字是
yourRepo
- 在本地的仓库中运行下面的命令:
注意,origin
这里是你的远程库的名字,可以根据需要自行设置。
添加完成后进入.git
,打开 config,这里会多出一个remote "origin"
内容,这就是刚才添加的远程地址,也可以直接修改 config 来配置远程地址。可以使用 HTTPS 协议:
git remote add origin git@github.com:yourName/yourRepo.git
git remote add origin https://github.com/try-git/try_git.git
- 把本地库的某个分支(例如 master)的所有内容推送到远程库:
Git 可以通过-u
参数把本地的 master 分支和远程的 master 分支关联起来,在以后的 push 或 pull 时可以简化命令,直接使用git push
或git pull
即可操作这个仓库的 master 分支。关于-u
参数,可以参考 这里。
git push -u origin master