Git学习指南 基础 Git是什么? 懂的人已经懂了,不懂的人就看下去.
安装:
OSX: http://code.google.com/p/git-osx-installer/downloads/list?can=3
Windows: https://git-for-windows.github.io/
Linux: yum, apt …
初始化一个叫test的新仓库.
1 2 $ git init test 初始化空的 Git 仓库于 /data/gi t/test/ .git/
配置用户信息,这些信息回在commit时用到.--global
是全局的设置.默认是非全局.
1 2 $ git config --global user.name "username" $ git config --global user.email "username@yyland.com"
查看配置信息
1 2 3 4 5 6 7 8 9 10 11 12 13 $ cat ~/.gitconfig [user] name = username email = username@yyland.com $ git config -l push.default =simple core.repositoryformatversion =0 core.filemode =true core.bare =false core.logallrefupdates =true user.name =username user.email =username@yyland.com
图解Git
入门操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 $ git usage: git [--version ] [--help ] [-C <path> ] [-c name=value] [--exec-path[=<path> ]] [--html-path] [--man-path] [--info-path] [-p | --paginate | --no -pager] [--no -replace-objects] [--bare] [--git-dir=<path> ] [--work-tree=<path> ] [--namespace=<name> ] <command> [<args> ] 这些是各种场合常见的 Git 命令: 开始一个工作区(参见:git help tutorial) clone 克隆一个仓库到一个新目录 init 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 在当前变更上工作(参见:git help everyday) add 添加文件内容至索引 mv 移动或重命名一个文件、目录或符号链接 reset 重置当前 HEAD 到指定状态 rm 从工作区和索引中删除文件 检查历史和状态(参见:git help revisions) bisect 通过二分查找定位引入 bug 的提交 grep 输出和模式匹配的行 log 显示提交日志 show 显示各种类型的对象 status 显示工作区状态 扩展、标记和调校您的历史记录 branch 列出、创建或删除分支 checkout 切换分支或恢复工作区文件 commit 记录变更到仓库 diff 显示提交之间、提交和工作区之间等的差异 merge 合并两个或更多开发历史 rebase 本地提交转移至更新后的上游分支中 tag 创建、列出、删除或校验一个 GPG 签名的标签对象 协同(参见:git help workflows) fetch 从另外一个仓库下载对象和引用 pull 获取并整合另外的仓库或一个本地分支 push 更新远程引用和相关的对象 命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些概念帮助。 查看 'git help <命令>' 或 'git help <概念>' 以获取给定子命令或概念的 帮助。
add 解释: 添加文件内容至暂存区
在仓库中增加一个文件a.txt
1 2 3 4 5 6 $ echo "test 1" > a.txt $ cat a.txt test 1$ git add a.txt $
红色箭头就是git add
所做的动作. 但是还不算真正提交到仓库中.
status 解释: 显示工作区状态
再新建一个文件b.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ echo "b.txt" > b .txt $ git status 位于分支 master 初始提交 要提交的变更: (使用 "git rm --cached <文件>..." 以取消暂存) 新文件: a .txt 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容) b .txt
可以看到a.txt是已提交变更(已提交到暂存区,非仓库
),而b.txt是未跟踪的文件
1 2 3 4 5 6 7 8 9 10 11 $ git add b .txt $ git status 位于分支 master 初始提交 要提交的变更: (使用 "git rm --cached <文件>..." 以取消暂存) 新文件: a .txt 新文件: b .txt
此时可以看到a.txt和b.txt都已被提交到暂存区.
commit 解释: 记录变更到仓库
1 2 3 4 5 $ git commit -m "add a.txt,b.txt" [master (根提交) 0 fed25b] add a.txt,b.txt 2 files changed , 2 insertions(+) create mode 100644 a.txt create mode 100644 b.txt
红色箭头就是git commit
干的工作.
log 解释: 显示提交日志
1 2 3 4 5 6 $ git log commit 0f ed25b391a44097c53e85c8b7a50d23d4312acb Author: username <username@ yyland.com> Date: Fri Jul 22 15 :09 :46 2016 +0800 add a.txt,b.txt
注:
此处可以看到前面配置的user.name和user.email信息. 以及git commit -m "xxx"
中填写的备注日志.
mv 解释: 移动或重命名一个文件、目录或符号链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ git mv a.txt c.txt $ git commit -am "mv a.txt c.txt" [master 85fe174 ] mv a.txt c.txt 1 file changed, 0 insertions(+), 0 deletions(-) rename a.txt => c.txt (100 %) $ git log commit 85fe174 ba75d4d798476fa6f594368111d9f5fff Author: username <username@ yyland.com> Date: Fri Jul 22 15 :25 :19 2016 +0800 mv a.txt c.txt commit 0f ed25b391a44097c53e85c8b7a50d23d4312acb Author: username <username@ yyland.com> Date: Fri Jul 22 15 :09 :46 2016 +0800 add a.txt,b.txt $ ls b.txt c.txt
注:
上面的命令git commit -am "xxx"
中-a
就是git add
的意思. 这句命令可以分拆成git add filename
和git commit -m "xxx"
两句命令.
rm 解释: 从工作区和索引中删除文件
1 2 3 4 5 6 7 8 $ git rm c.txt rm 'c.txt' $ git commit -am "rm c.txt" [master fab6a77] rm c.txt 1 file changed , 1 deletion(-) delete mode 100644 c.txt $ ls b.txt
中级操作 远程仓库 之前我们在初级操作中所有的操作都是在本地进行的.如果我们需要和别人协同工作,就需要用到远程仓库.这个仓库可能是某一台服务器,24小时开机提供服务状态.类似SVN服务器.得到这样一台远程服务器的方式有:
DIY.搭建一个gitlab服务器.https://about.gitlab.com/
Github.使用全球最大的同性交友网站.https://github.com
Gitshell.国内的一个网站.https://gitshell.com
使用方法:
注册帐号
生成sshkey
上传ssh public key
本地配置ssh key
创建一个新仓库
以github为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ ssh-keygen -b 4096 -C test@yyland.com -f id_rsa_test_yyland_com Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa_test_yyland_com. Your public key has been saved in id_rsa_test_yyland_com.pub. The key fingerprint is: SHA256:1+a/++ts0QihcNDIdOF8Dbmlan9T382wiRgS+7e13Z8 test@yyland.com The key's randomart image is: +---[RSA 4096]----+ | oo+o... | | ++o oo. | | oo..=. | | . .o+ | | So..o. .. | | o.+o o.o | | + +...*= | | o +o*+B | | ..oBEB | +----[SHA256]-----+ $ ls d_rsa_test_yyland_com.pub id_rsa_test_yyland_com
d_rsa_test_yyland_com.pub 公钥,需要上传到github
id_rsa_test_yyland_com 私钥,除非要被打死了,不然不要给别人
找到用户配置页(头像->settings).点击SSH and GPG keys
点击New SSH key
复制public key的内容,点击Add SSH key
输入帐号密码
查看已有的key
1 2 3 4 5 6 7 $ echo Host github.com IdentityFile PATH/id_rsa_test_yyland_com // 测试 $ ssh -T git@github.com Hi yyland! You've successfully authenticated, but GitHub does not provide shell access.
点击Repositories
->NEW
输入仓库名test
->Create repository
创建成功,并提示一些基础命令用法
clone 解释: 克隆一个仓库到一个新目录
把在github上新建的test仓库clone到本地
1 2 3 4 $ git clone git@github .com: jasonyy77/test.git 正克隆到 'test' ... warning: 您似乎克隆了一个空仓库。检查连接... 完成。
push 解释: 更新远程引用和相关的对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 $ cd test/ $ ls $ touch aaa.txt $ git add aaa.txt $ git commit -m "add aaa.txt" [master (根提交) c6bbf82] add aaa.txt 1 file changed , 0 insertions(+), 0 deletions(-) create mode 100644 aaa.txt jason@jason-Pavilion-m4:/data /git/test $ git push origin master 对象计数中: 3 , 完成. 写入对象中: 100 % (3 /3 ), 203 bytes | 0 bytes /s, 完成. Total 3 (delta 0 ), reused 0 (delta 0 ) To git@github.com:jasonyy77/test.git * [new branch] master -> master
pull 解释: 获取并整合另外的仓库或一个本地分支
1 2 $ git pull Already up-to -date .
没有变化.因为github上的内容和本地一样.所以本地的内容不需要更新.
branch 解释: 列出、创建或删除分支
高级操作