安装
debian 下 安装 : sudo apt-get install git
windows 下: 下载安装包进行安装
安装完后打开GitBash
进行账户设置:
设置用户名,邮箱
1 | $ git config --global user.name xlh |
2 | $ git config --global user.email "[email protected]" |
–global 标识这台电脑上的所有git仓库都会使用这个账号。 (全局设置)
必要配置:
1 | mkdir gittest1 // 创建一个文件夹,作为版本库 |
2 | cd gittest1 |
3 | pwd // 显示当前目录 |
4 | git init // 初始化仓库,会在所选目录下创建 .git 隐藏文件夹 |
其他配置
1.让git显示颜色,让命令输出看起来更醒目
1 | git config --global color.ui true` |
--global
// 指定为全局配置 ,不加这个参数则配置只在当前仓库生效
2.忽略指定文件:
在工作区创建一个.gitignore
文件, 然后把忽略的文件名,或文件类型,或文件夹 填进去,即可。 .gitignore
文件本身要加入版本控制。 如:database.db, *.so, *.class, dist
想要强制添加某个已被忽略的文件:git add -f origin aaa.class
3.设置忽略文件
1 | git check-ignore // 检查忽略文件中的某个规则在忽略文件中的哪个位置 |
$ git chexk-ignore -v aaa.class
.gitignore:3:*.class // 结果可以看出,是在第三行忽略了这类文件。
4.配置别名
1 | 例:git config --global alias st status // 设置 status 用 st 代替 |
2 | 则:git status ⇒ git st |
3 | |
4 | // 常用别名: |
5 | git config --global alias co checkout |
6 | git config --global alias ci commit // 则提交可以写成:git ci ‘bala bala bala ...’ |
7 | git config --global alias br branch |
8 | // 其他别名参考: |
9 | git config --global alias unstage ‘reset HEAD’ // 则 git unstage aaa.js 相当于 git reset HEAD aaa.js |
10 | git config --global alias last ‘log -1’ // git last 显示最后一次提交信息 |
11 | git config --global alias lg “log --color --graph --pretty=formart:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit’” // 美化 log 输出 |
每个仓库的配置文件 在.gIt/config文件中。里边包含了这个仓库的基本信息,远程仓库,分支信息,别名设置 等,要编辑配置在这个文件里编辑即可。
当前用户的配置文件在用户主目录下的一个隐藏文件.gitconfig中。别名也可以在这里配置,改错了可以删掉重新通过命令配置。
使用:
1.在仓库文件夹下创建一个文件,如: test.txt,并写入一些内容
2.git add test.txt
// 将文件加入版本库管理, 多个文件一起加入: git add a.txt b.txt
3.git commit -m 'add a file'
// 提交修改 -m
后边是填入本次修改的备注
4.git status
// 查看当前版本库状态
5.git diff test.txt
// 查看仓库最新版本与本地当前文件之间的差异(本地做了哪些更改(未提交))
6.git log
查看仓库提交历史记录 --pretty=oneline
// 简化每条历史记录为一行
7.git reset --hard HEAD^
回退到上个版本 ,几个^
就是回退到倒数第几个版本,往上指定(100)个版本:HEAD~100
,回退到指定版本号的版本:git reset --hard xxxxx
, 可以往前,可以往后。
8.git reflog
查看自己的提交命令历史记录及版本号
9.git diff HEAD -- test.txt
查看工作区(本地当前)和版本库最新版本的区别
git diff commit_id_1 commit_id_2
比较两个版本之间的差异
git diff
比较 工作区(当前打开改文件看到的状态)与暂存区(add后 commit前 )区别
git diff -staged
比较暂存与仓库的区别
10.git checkout -- test.txt
撤销更改, 如果文件修改后没有add,就会回退到仓库最新版,修改后有 add,没有commit,就回退到add的版本; 如果已经add过,没有commit;又想回退到仓库最新版,用:
git reset HEAD test.txt
, 即可撤销掉add, 本地文件为add前的文件,再执行
git checkout -- text.txt
用仓库最新版覆盖本地。
11.删除文件:
(1). WINDOWS系统中,在本地删除要删除的文件,
(2). git rm test.txt
或 git add test.txt
,
本地删掉文件后要从仓库恢复文件:git checkout text.txt
12.cat xxxx.txt
// win git Bash 查看文本文件内容
与远程库协作
13.生成秘钥 安装完git后生成ssh key: ssh-keygen -t rsa -C "[email protected]"
, 然后把公钥文件中的内容加到git仓库中。
14.github 上的操作:
把本地库与远程库进行关联:
github创建完空仓库后:
(1). 通过命令行从github库克隆出新的仓库:
1
echo "# testRes2" >> README.md
2
git init
3
git add README.md
4
git commit -m "first commit"
5
git remote add origin [email protected]:XElengo/testRes2.git
6
git push -u origin master
(2).通过命令行把 已有的本地库与github仓库进行关联并把本地库的内容上传到github库:
1 | git remote add origin git@github.com:XElengo/testRes2.git |
2 | git push -u origin master |
两个命令原理都一样,都是先在本地的git仓库加文件,再上传到github仓库。git push
把当前分支master推送到远程。-u
把本地master分支和远程的master分支关联起来。git push origin master
把本地指定(master)分支的最新版推送到指定的github(远程(origin))仓库对应的远程分支。
注意:第一次使用git的clone 或 push 会有一个警告,需要确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。
Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了,这个警告指挥出现一次。
(3). 从远程库把项目导到本地:
进入一个文件夹,然后把github仓库的项目克隆下来成为一个本地库:git clone [email protected]:XElengo/test1Res.git
15.git remote -m origin
// 本地库与远程库取消关联,在某个本地库文件夹中操作
16.一个本地库可以关联多个远程库,只要给远程库起的本地名字/代号(origin)不一样即可。
分支管理
1 | git checkout -b dev // 创建dev分支并切换到dev 分支。 |
2 | git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令: |
3 | git branch dev // 创建分支 |
4 | git checkout dev // 切换分支 |
5 | |
6 | git branch // 列出所有分支,当前分支前面标有*号。切换分支后的提交都会提交到所选分支。 |
7 | git merge dev // 合并指定分支(dev)到当前分支 |
8 | git branch -d dev // 删除指定分支 |
9 | git branch -D dev // 强制删除指定分支,分支在没有被合并前不允许删除,需要强制删除。 |
10 | git branch --set-upstram-to=origin/dev dev // 指定本地分支与远程分支的关联(名字建议保持一致,但允许不一样), |
11 | // 用于 远程库已经有了一个分支,你又在本地新建了一个同名分支,这时拉取(pull)远程代码到本地会冲突,需要进行关联。关联后如有冲突继续解决冲突,然后再进行push。 |
- 在不同分支对同一文件分别提交修改,再执行merge会出现冲突,出现冲突时,用
git status
可以查看冲突信息,修复冲突后再进行提交和合并。
1 | git log --graph --pretty=oneline --abbrev-commit // 以图形化方式展示分支合并图 |
git merge
这种方式提交,默认会在删除分支后丢掉你分支信息git merge --no-ff -m ”commit mark” dev
// 这种提交,参数(--no-ff
)禁用Fast forward
,这样能在提交历史中保留分支信息git stash
// 暂存当前分支做的尚未提交的本地修改,并把当前工作区的文件恢复到修改之前的状态。git stash list
// 查看本地暂存列表git stash apply
// 从 stash 恢复暂存的修改(工作进度),stash 中的 内容不会被删除,git stash drop
// 删除stashgit stash pop
// 从stash恢复修改并删除stash,相当于上面两句的集合。git stash apply stash@{0}
// 当有多个版本的stash时,恢复到指定版本的stash。
git 建立一个新的bug分支,通常命名为 issue
-101
为了开发一个新功能而建立的分支通常命名为 feature
-newFea,开发完成后合并,删除该分支。git remote
查看远程库信息git remote -v
显示更详细的信息
origin [email protected]:XElengo/test1Res.git (fetch)
origin [email protected]:XElengo/test1Res.git (push)
上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
要推送哪些本地分支到远程库完全由自己决定,通常master要时刻与远程库同步,dev作为开发主分支也要与远程库保持同步,bug分支一般不需要推送到远程仓库,feature分支如果多人合作开发,就要保持同步,如果单独开发,就等开发完毕再推送到远程库。
如果多个人在不同的客户端分别修改了同一个文件,第二个人提交推送时会产生冲突,需要先把远程库最新版本拉下来,在本地解决冲突后再提交到远程库:
1
git pull // 从远程库拉取最新版代码
2
git push origin branch-name // 推送本地分支到远程库
git rebase
// 把本地未push的分叉的提交历史整理成一条直线,使提交历史更美观(变基)。注意:只对尚未推送或分享给别人的本地修改执行变基操作清理历史;
从不对已推送至别处的提交执行变基操作
标签管理
1 | git tag v1.0 // 在某分支(master)中把当前版本命名成一个标签,便于以后查找这个节点的文件。 |
2 | git tag // 查看所有的标签,标签按照字母排序 |
3 | git tag v0.9 f010234 // 把过去的某个版本打一个标签,指定提交id,给那次提交打一个标签。 |
4 | git tag -a v0.1 -m “version 0.1 released” 0x01234 // -a 指定标签名,-m 指定说明文字 |
5 | git show v1.0 // 查看某个版本标签信息 |
6 | git tag -d v0.1 // 删除某个标签 |
7 | git push origin <tagname> // 推送某个标签到远程仓库 |
8 | git push origin --tags // 推送所有尚未推送到远程仓库的标签 |
要删除远程仓库的某个标签:
先删除本地:git tag -d v0.1
再删除远程:git push origin :refs/tags/v0.1
(两条命令没有必然联系)
搭建git服务器
debian/ubuntu:
1.安装git : sudo apt-get install git
2.创建用户: sudo adduser git
3.把所有用户的公钥导入到 /home/git/.ssh/authorized_keys
, 一行一个公钥。
如果人数较少,可以使用这种方法,如果有几百人,可以使用 Gitosis管理公钥。
4.初始化git仓库:
选定一个目录作为git仓库,如:/srv/sample.git
,
在 /srv目录下输入命令: sudo git init --bare sample.git
git会创建一个裸仓库,没有工作区,只能上传文件和共享,所以不允许用户直接登录进服务器去改工作区的文件,且通常以.git结尾。
5.把仓库文件所有权改为git: sudo chown -R git:git sample.git
6.禁用shell登录: cd进入/etc/passwd
文件,修改以 git 用户开头的一行,如:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
使git 用户只能使用git命令。
到此,远程仓库就搭建好了。
7.在自己的客户端电脑上克隆远程仓库:
1 | git clone git@server:/srv/sample.git |
其他:
- git 仓库默认是不支持权限控制的,但是因为git支持钩子(
hook
),所以,可以在服务器端编写脚本达到控制提交等操作,可以使用Gitolite
这样的小工具。
linux vim 常用命令
vi readme.txt
进入VIM编辑器,可以新建文件也可以修改文件
如果这个文件以前是没有的,则为新建,则下方有提示为新文件。
按ESC键 跳到命令模式,然后:
1 | :w 保存文件但不退出vi |
2 | :w file 将修改另外保存到file中,不退出vi |
3 | :w! 强制保存,不推出vi |
4 | :wq 保存文件并退出vi |
5 | :wq! 强制保存文件,并退出vi |
6 | q: 不保存文件,退出vi |
7 | :q! 不保存文件,强制退出vi |
8 | :e! 放弃所有修改,从上次保存文件开始再编辑 |