本文参考菜鸟教程https://www.runoob.com/git/git-tutorial.html
一、Git 安装配置
Windows 平台上安装
在 Windows 平台上安装 Git 同样轻松,有个叫做 msysGit 的项目提供了安装包,可以到 GitHub 的页面上下载 exe 安装文件并运行:
安装包下载地址:https://gitforwindows.org/
完成安装之后,就可以使用命令行的 git 工具(已经自带了 ssh 客户端)了,另外还有一个图形界面的 Git 项目管理工具。
在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。
用户信息
第一步需要配置用户名和邮箱地址:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
文本编辑器
设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::
$ git config --global core.editor emacs
差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。比如要改用 vimdiff 的话:
$ git config --global merge.tool vimdiff
查看配置信息
要检查已有的配置信息,可以使用 git config --list 命令:
$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com
这些配置我们也可以在 ~/.gitconfig 或 /etc/gitconfig 看到,如下所示:
vim ~/.gitconfig
查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:
$ git config user.name
二、Git 工作流程
- 克隆 Git 资源作为工作目录。 git clone
- 在克隆的资源上添加或修改文件。
- 如果其他人修改了,你可以更新资源。
- 在提交前查看修改。
- 提交修改。
- 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。
三、Git 创建仓库
使用方法
1、使用当前目录作为Git仓库,我们只需使它初始化。
git init
2、使用我们指定目录作为Git仓库。
git init newrepo
git clone拷贝项目
我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。
克隆仓库的命令格式为:
git clone <repo>
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone
参数说明:
repo:Git 仓库。
directory:本地目录。
比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:
$ git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。
如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/grit.git mygrit
四、Git 基本操作
1、获取与创建项目命令:git init
2、克隆项目: git clone [url]
例如:我们克隆 Github 上的项目:$ git clone git@github.com:schacon/simplegit.git
3、基本快照-添加文件:
git status
命令用于查看项目的当前状态。
例如:添加以下两个文件README、hello.php:
$ git add README hello.php
4、基本快照-修改 README 文件:
$ vim README
在 README 添加以下内容:# Runoob Git 测试,然后保存退出。
git status
命令用于查看项目的当前状态。
修改后我们再执行 git add
命令将其添加到缓存中
当你要将你的修改包含在即将提交的快照里的时候,需要执行 git add
。
5、基本快照-是否有修改
$ git status -s
加了 -s 参数,以获得简短的结果输出。
6、查看执行 git status 的结果的详细信息
- 尚未缓存的改动:
git diff
- 查看已缓存的改动:
git diff --cached
- 查看已缓存的与未缓存的所有改动:
git diff HEAD
- 显示摘要而非整个 diff:
git diff --stat
7、将缓存区内容添加到仓库中:git commit
使用 -m
选项以在命令行中提供提交注释
$ git add hello.php
$ git status -s
A README
A hello.php
$ git commit -m '第一次版本提交'
用 -a
选项跳过git add
提交缓存的流程
git commit -am '修改 hello.php 文件'
8、取消已缓存的内容:git reset HEAD
$ git reset HEAD hello.php
没有提交hello.php
的改动
简而言之,执行 git reset HEAD
以取消之前 git add
添加,但不希望包含在下一提交快照中的缓存。
使用以下命令将 hello.php 的修改提交:
$ git commit -am '修改 hello.php 文件'
9、移除某个文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
git rm <file>
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f <file>
如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached
选项即可
git rm --cached <file>
如我们删除 hello.php文件:
$ git rm hello.php
rm 'hello.php'
$ ls
README–不从工作区中删除文件:
$ git rm --cached README
rm 'README'
$ ls
README
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r *
进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。
10、git mv 命令用于移动或重命名一个文件、目录、软连接
$ git mv README README.md
五、Git 分支管理
1、创建分支命令:
git branch (branchname)
2、切换分支命令:
git checkout (branchname)
git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下
3、合并分支命令:
git merge
4、列出分支基本命令:
git branch
5、删除分支命令:
git branch -d (branchname)
六、Git 查看提交历史: git log
–oneline 选项来查看历史记录的简洁的版本
–graph 选项,查看历史中什么时候出现了分支、合并
–reverse 参数来逆向显示所有日志
七、Git 标签
为项目 runoob 发布一个"1.0"版本。 可以用 git tag -a v1.0
命令给最新一次提交打上(HEAD)"v1.0"的标签:
$ git tag -a v1.0
查看标签:
git log --decorate
追加标签( 85fc7e7):
$ git tag -a v0.9 85fc7e7
$ git log --oneline --decorate --graph
查看所有标签
$ git tag
指定标签信息命令
git tag -a <tagname> -m "runoob.com标签"
PGP签名标签命令:
git tag -s <tagname> -m "runoob.com标签"
八、远程仓库(Github)
1、添加远程库
把本地仓库的内容推送到GitHub仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:
git remote add [shortname] [url]
以 Github 为例作为远程仓库,如果你没有 Github 可以在官网 https://github.com/注册。
由于本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
your_email@youremail.com
改为你在 Github 上注册的邮箱。之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。
回到 github 上,进入 Account => Settings(账户配置)。
左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
为了验证是否成功,输入以下命令:
$ ssh -T git@github.com
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.
之后在Repository name 填入 runoob-git-test(远程仓库名) ,其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的Git仓库:
根据 GitHub 的提示,在本地的仓库下运行命令:
$ mkdir runoob-git-test # 创建测试目录
$ cd runoob-git-test/ # 进入测试目录
$ echo "# 菜鸟教程 Git 测试" >> README.md # 创建 README.md 文件并写入内容
$ ls # 查看目录下的文件
README
$ git init # 初始化
$ git add README.md # 添加文件
$ git commit -m "添加 README.md 文件" # 提交并备注信息
[master (root-commit) 0205aab] 添加 README.md 文件
1 file changed, 1 insertion(+)
create mode 100644 README.md
#提交到 Github
$ git remote add origin git@github.com:tianqixin/runoob-git-test.git
$ git push -u origin master
2、查看当前的远程库
$ git remote -v
加上 -v 参数,你还可以看到每个别名的实际链接地址
3、提取远程仓库
a、从远程仓库下载新分支与数据:
git fetch
该命令执行完后需要执行git merge 远程分支到你所在的分支。
b、从远端仓库提取数据并尝试合并到当前分支:
git merge
4、推送到远程仓库
$ touch runoob-test.txt # 添加文件
$ git add runoob-test.txt
$ git commit -m "添加到远程"
master 69e702d] 添加到远程
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 runoob-test.txt
$ git push origin master # 推送到 Github
5、删除远程仓库
git remote rm [别名]
例子:
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
# 添加仓库 origin2
$ git remote add origin2 git@github.com:tianqixin/runoob-git-test.git
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
origin2 git@github.com:tianqixin/runoob-git-test.git (fetch)
origin2 git@github.com:tianqixin/runoob-git-test.git (push)
# 删除仓库 origin2
$ git remote rm origin2
$ git remote -v
origin git@github.com:tianqixin/runoob-git-test.git (fetch)
origin git@github.com:tianqixin/runoob-git-test.git (push)
九、Git 服务器搭建
上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费。
这时我们就需要自己搭建一台Git服务器作为私有仓库使用。
接下来我们将以 Centos 为例搭建 Git 服务器。
1、安装Git
$ yum install curl-devel expat-devel gettext-devel openssl-devel
zlib-devel perl-devel $ yum install git
接下来我们 创建一个git用户组和用户,用来运行git服务:
$ groupadd git
$ useradd git -g git
2、创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
如果没有该文件创建它:
$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys
3、初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是/home/gitrepo/runoob.git,在/home/gitrepo目录下输入命令:
$ cd /home
$ mkdir gitrepo
$ chown git:git gitrepo/
$ cd gitrepo
$ git init --bare runoob.git
Initialized empty Git repository in /home/gitrepo/runoob.git/
以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
$ chown -R git:git runoob.git
4、克隆仓库
$ git clone git@192.168.45.4:/home/gitrepo/runoob.git
Cloning into 'runoob'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
192.168.45.4 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。
这样我们的 Git 服务器安装就完成。