Linux安装git:有两种方式
一种方式是用yum安装git
- 用git --version 查看是否已经安装
出现上述情况应该是CentOS5的版本,由于yum源中没有git,所以需要预先安装一系列的依赖包。在centOS6的yum源中已经有git的版本了,可以使用yum源进行安装
2.安装命令:yum -y install git 只用这一条命令就安装了。但是一般安装的git版本比较老。简单但是版本不行,如果要想用新版本的git则需要从GitHub上现在,这就需要另一种安装方式。
3.git --version
第二种安装方式:编译安装git
1.用cat /etc/issue 查看centOS的版本
是CentOS6.5
- 通过yum -y update 命令来更新版本
- 下载需要的git安装包
wget https://codeload.github.com/git/git/tar.gz/v2.13.0-rc1
4.将名称替换一下,如果下载的文件名称是以tar结尾的则不用替换了
mv v2.13.0-rc1 v2.13.0-rc1.tar.gz
5.解压压缩包
tar -zxvf v2.13.0-rc1.tar.gz
- 进入到解压后的文件中
cd git-2.13.0-rc1
- 拿到源码后我们要编译源码,但是在编译源码之前我们要获取编译时需要的依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
- 安装编译源码所需的依赖时,如果用yum方式安装过git则会提示安装了,则要先把旧版本的git删除
Yum remove git
- 编译git源码
make prefix=/usr/local/git all
- 指定git的安装路径
make prefix=/usr/local/git install
- 打开环境变量配置文件
vim /etc/profile
在底部加入
export PATH=$PATH:/usr/local/git/bin
- 刷新环境变量
source /etc/profile
- 最后在输入 git --version 查看版本。
版本库管理
创建版本库
- 在一个合适的位置创建一个版本库(就是先创建一个目录)
Mkdir repository
Cd repository
- 可以先用git status来查看repository目录是不是git仓库,如果不是则执行git init
3.通过git init命令把这个目录变成Git可管理的仓库
4.创建一个文件,文件名为readme.txt 将这个文件放入到git仓库中只需要两步
- .使用git add 命令告诉git,把文件添加到仓库:git add readme.txt
- .用git commit命令告诉git,把文件提交到仓库:git commit -m “这是我的第一个文件”
版本回退
1.可以用git log命令查看修改了什么东西。如果觉得乱可以用git log --pretty=oneline命令
2.用git reset --hard HEAD^ 可以进行回退,回退到上个版本,如果想回退到上上个版本则用HEAD^^,回退到100个版本以前用HEAD~100
3.如果还想回到回退前的那个版本,只要刚才的窗口没有关,那么找到commit_id,执行下面的命令:git reset --hard 12f77bdc0e63ffba22e5191541113570655e897a
4.如果关掉了窗口,找不到回退的commit_id怎么办,git中通过git reflog专门记录你的每次命令。
生成SSH key
Linux 与 Mac 都是默认安装了 SSH ,而 Windows 系统安装了 Git Bash 应该也是带了 SSH 的。大家可以在终端(win下在 Git Bash 里)输入 ssh 如果出现以下提示证明你本机已经安 装 SSH, 否则请搜索自行安装下。
紧接着输入 ssh-keygen -t rsa ,什么意思呢?就是指定 rsa 算法生成密钥,接着连续三个回 车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa 是密钥, id_rsa.pub 就是公钥。这两文件默认分别在如下目录里生成:
Linux/Mac 系统 在 ~/.ssh 下,win系统在 /c/Documents and Settings/username/.ssh 下, 都是隐藏文件,相信你们有办法查看的。 接下来要做的是把 id_rsa.pub 的内容添加到 GitHub 上,这样你本地的 id_rsa 密钥跟 GitHub 上的 id_rsa.pub 公钥进行配对,授权成功才可以提交代码。
GitHub 上添加 SSH key
第一步先在 GitHub 上的设置页面,点击最左侧 SSH and GPG keys : 然后点击右上角的 New SSH key 按钮: 29向GitHub 提交代码 需要做的只是在 Key 那栏把 id_rsa.pub 公钥文件里的内容复制粘贴进去就可以了(上述示例 为了安全粘贴的公钥是无效的),Title 那栏不需要填写,点击 Add SSH key 按钮就ok了。 这里提醒下,怎么查看 id_rsa.pub 文件的内容? Linux/Mac 用户执行以下命令: cd ~/.ssh cat id_rsa.pub Windows用户,设置显示隐藏文件,可以使用 EditPlus 或者 Sublime 打开复制就行了SSH key 添加成功之后,输入 ssh -T git@github.com 进行测试,如果出现以下提示证明添 加成功了。
工作区和暂存区
1.Git中我的repository就是一个工作区,在我的工作区中有一个隐藏目录.git
这个.git不算是工作区,而是git的版本库,git版本库中存了很多东西,其中最重要的就是stage暂存区,还有git给我们创建的第一个分支master,以及master的一个指针head.
2.我们向git版本库中添加文件一般分为两步:
1)用git add readme.txt命令将reademe.txt 文件添加到暂存区中。
2).用git commit -m “描述”命令将暂存区中的所有内容提交到分支上。
因为我们创建git版本库的时候git自动创建了一个master分支,现在我们提交到的分支就是master分支。
- 举例说明:
1).新建一个文件newfile,然后修改readme文件用git命令查看状态
2).现在使用两次git add 将newfile和readme文件都添加到暂存区,然后使用git status查看状态
- .执行git commit -m “描述”,将暂存区中的数据提交到master分支上。这是暂存区中就没有数据了。
管理修改
Git跟踪管理的是修改而不是文件,为什么这么说呢?现在看例子。
- 先修改一次readme.txt 文件
增加了fish333这一行,然后执行git add readme.txt命令,查看一下状态执行git status命令
现在将第一次修改的数据放入到了暂存区中。
- 现在进行第二次修改:
然后直接执行git cmmit -m “描述”命令,然后在git status 查看一下状态。
发现第二次修改的内容没有被提交到分支上。
因为第一次修改后将文件通过git add命令放入到暂存区中了,但是第二次修改后没有放到暂存区中,导致git commit后只有第一次修改的数据放入到分支上了。
所以每次修改完后要执行git add 命令,要将修改的文件放入到暂存区中,然后执行git commit后才能到分支上。
提交后可以使用git diff HEAD -- readme.txt 命令来查看工作区和版本库中最新版本的区别。
没有提交的异常情况是:
正产情况下是
撤销修改
- 如果在工作区中修改了文件内容,如何进行撤销呢,使用git checkout -- <文件>命令进行丢弃。- - 是非常重要的,如果没有- -则表示切换到另一个分支的意思。
- 如果不仅在工作区中修改了文件内容,还将内容提交到了暂存区中,想要丢弃则分为两个步骤:
- .用git reset HEAD readme.txt将文件退回到工作区中。
- .用git checkout --readme.txt 将工作区的文件丢弃
- .
- .
将下面的bear555内容删除了。
3.如果已经提交到了分支上想要回退则参考版本回退
删除文件
1.如果还没有提交到工作区,那直接rm newfile.txt就行了。
2.如果是已经提交到分支的文件,rm newfile.txt只是把工作区的文件删除了,这时候工作区和版本库的内容不一致会出现下面提示:
这时候要把版本库中的文件也删除掉,用git rm 命令,并且git commit
然后进行git commit
- 如果要是不小心把工作区的文件误删了,则可以通过git checkout -- newfile.txt 命令恢复。
远程仓库
添加到远程仓库
1.要关联一个远程库,使用命令git remote add origin git@github.com:xiaohuniu/repository.git;
这个xiaohuniu是我在github上的账户名称repository.git是本地仓库
2.关联后使用命令git push -u origin master,第一次推送master分支上的内容
3.也可以推送其他分支的内容:git push -u origin a ,推送分支a的内容。
从远程库克隆
1.先在github上创建一个远程库
- 然后使用git clone 克隆一个本地库
git clone git@github.com:xiaohuniu/firstsource.git
分支管理
创建分支
1.git branch 命令是分支的意思。
Master前面的*表示当前的分支是master
2.但是一般操作不在master上进行操作,可以重新创建一个分支
git branch a 创建一个名字叫a的分支
3.创建分支后还要切换到分支
git checkout a
a前面的*表示当前的分支是a
4.创建分支和切换到分支一步到位的命令是:
git checkout -b a
5.一般需要做两步,第一步切换到master分支,如果已经在了就不用切换了,第二部执行git merge a,意思是把a分支的代码合并过来。合并分支的命令:git merge
- git branch -d a 删除分支a 前提是刚建的分支,或者a分支上的代码已经合并了。
- git branch -D a 当a分支的代码没有被合并,但是想强制删除a则使用这个命令
- git tag v1.0 设置版本号。
- 当切换到a分支上后,修改readme.txt文件,然后git add——>git commit 后修改的reademe.txt文件中的内容只在a分支上有,在master分支上没有,可以通过git merge a 将a分支上的内容合并到master分支上。
解决冲突
1.当创建一个新分支a后,将a上的文件readme.txt进行修改然后git add readme.txt——>git commit -m “描述”后通过git checkout master切换到master分支上,在修改readme.txt文件然后git add readme.txt——>git commit -m “描述”。这时候在执行命令git merge a进行合并会出现冲突如下:
- 通过git status命令可以查看冲突的文件:
- 这时候就需要手动解决冲突,打开readme.txt文件
<<<<<<< HEAD
zaimaster shang zuole xiugai
=======
zaiafenzhishangzuolexiugai
>>>>>>> a
表示两个文件中冲突的部分,修改成其中一个就行,例如修改成zaiafenzhishangzuolexiugai
然后删除a分支,可与通过git log --graph来查看分支合并图。
分支管理策略
Fast forward是自动合并,在删除分支后,有时候会丢掉分支信息。
使用--no-ff方式合并
git merge --no-ff -m "描述" a
Bug分支
- git stash 将当前工作现场储藏起来,等以后恢复现场后继续工作。然后在创建一个新的分支进行修改bug,修改完后合并到master上,然后删除分支。
- 可以用git stash list命令查看工作现场存到哪了。
- 恢复工作现场有两种方式:
- .git stash apply 恢复,但是恢复后stash并没有被删除,要用git stash drop命令删除。
- .git stash pop ,在恢复的时候把stash进行删除。
删除完后在用git stash list 查看,如果没有内容则说明删除完了。
多人协作
- 查看远程库的信息用git remote命令,或者用git remote -v显示更详细的信息。
- 首先试图通过git push origin <分支名称> 推送自己的修改
- 如果推送失败是因为你本地要更新远程的修改,使用git pull试图合并。
- 如果合并有冲突,则解决冲突,并在本地提交。
- 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
这就是多人协作的工作模式,一旦熟悉了,就非常简单。