Git _安装配置

1. 安装git
centos上   
yum install -y epel-release

yum install -y git


A) CentOS上
yum install -y epel-release ; yum install -y git


B)Ubuntu上
sudo apt-get  install  git


C)windows上安装msysgit
下载地址  https://git-for-windows.github.io
或者 http://pan.baidu.com/s/1skFLrMt#path=%252Fpub%252Fgit

安装好后,输入 git 会列出常用命令。表示完成。

安装完成后,还需要最后一步设置
git config --global user.name "Your Name" //比如 aming
git config --global user.email "[email protected]" //写你的邮箱

为区别用户标记用。查看用户家目录下的 cat .gitconfig文件。


----------------------------------------------------------------


2. 创建版本库
mkdir  /home/gitroot  创建自己的git创库,存储版本的
cd /home/gitroot  进入目录,初始化

git init   //用这个命令初始化,让这个目录变成git可以管理的仓库

[root@YQ001 gitroot]# git init
Initialized empty Git repository in /home/gitroot/.git/

得到的目录/home/gitroot/.git/ 

[root@YQ001 gitroot]# ls /home/gitroot/.git/
branches  config  description  HEAD  hooks  info  objects  refs

初始化完成。

可以就在这里面创建文件,并写入东西。



---------------------------------------------------------------------------

3. 提交文件到仓库
创建一个文件 1.txt

(echo -e "123\naaa\n456\nbbb" > 1.txt)

vim 1.txt (例如写入些东西)


git add 1.txt  //把1.txt添加到仓库中

git commit -m "add new file 1.txt"   //add完了必须要commit才算真正把文件提交到git仓库里

[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "add new file 1.txt"
[master (root-commit) d83c1a1] add new file 1.txt
 1 files changed, 25 insertions(+), 0 deletions(-)
 create mode 100644 1.txt



初始使用该命令会提示:
*** Please tell me who you are.
Run
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
这是要让我们设置用户邮箱和用户名。根据它提示设置一下即可:
git config --global user.email "[email protected]"
git config --global user.name "aming"


echo -e "111111\n2222222222" >> 1.txt  //先更改一下1.txt

git status   //查看当前仓库中的状态,比如是否有改动的文件

# On branch master
# Changed but not updated:
#   (use "git add >..." to update what will be committed)           要么提交文件
#   (use "git checkout -- ..." to discard changes in working directory) 要么恢复原来的文件

# modified:   1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")


--------------------------

git diff 1.txt  //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本

[root@YQ001 gitroot]# git diff
diff --git a/1.txt b/1.txt
index 0e073b8..4e810e6 100644
--- a/1.txt
+++ b/1.txt
@@ -23,3 +23,4 @@ g
 fd
 g
 
+jsdfkljsljfklsdjflksjflksdjklfjsdklfjslkd

----------------



git checkout 1.txt //要去复原没有更改之前的文件动作。

git add 1.txt // 要去提交问见, 将要完成的动作

git commit -m "add new file 1.txt"   //add完了必须要commit才算真正把文件提交到git仓库里

git status 查看文件的状态,提示文件没有改变!


------------------------------------------------------------





4. 版本回退

vim 1.txt

写入内容,fjskljf 并提交。

[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "new wenjian"

在写入内容,并提交

[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "new wenjian 2"

多更改几次1.txt之后,都有进行 git add,  git commit操作
git log  //可以查看所有提交git仓库的记录操作
git log --pretty=oneline  //呈现在一行显示屏幕,更直观 ,俩命令相同功能。区别只查看不同内容的信息。

通过git log我们可以查看到过去提交的所有版本,所以根据这个log,我们可以指定回退某个版本
比如,结果如下
git log --pretty=oneline
77769f0d46e95a03d336acee4ee40a0c5737a577 new wenjian 2
7457b8118afbb63cde953a22a1572d6ca979a02c new wenjian
3b58dc91badea8c305392275dd9e8e5176129b7e add  a line 111111111
d83c1a12aa56344eaa88a4569f964b22cde0b636 add new file 1.txt


git reset --hard 3b58  //可以回退到第二行的这个版本,这里后面跟的字符串可以简写。最少四个字符

cat 1.txt 查看文件内容。

---------------------------

当回退到该版本后,再  git log 查看

则最上面的版本不再显示了,(之后修改的 。)

如果你发现恢复的不对,那如果想再倒回退到第一行那个版本怎么办?

git reflog  //任可以显示所有的版本列表出来。

继续

git reset --hard7776

即可以完成。再回退,再恢复。以此循环。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



5. 撤销修改


修改1.txt,发现改的不对,想恢复到上一次提交时的状态。

或者1.txt不小心给删除掉了。可以使用,已经 git add file了

git status 

git reset HEAD file

要么  git add 

要么  git checkout -- 1.txt  //恢复到上一次提交时的状态

首先

git status 查看

----------

如果1.txt修改完了,保存后,

git add 1.txt了,但没有commit,再想回退到上一次提交时的状态。可以使用

git  reset HEAD 1.txt
然后再
git checkout -- 1.txt


首先 git status 查看 --->  git reset HEAD 1.txt --->  git checkout -- 1.txt 完成恢复

-----------

那如果不仅add也commit了,那就用第4版本回退的方法。

6. 删除

cp 1.txt 2.txt

touch  2.txt
echo "22222222222222" > 2.txt
git add 2.txt
git commit -m "add new file 2.txt" 

上面的操作,我们在git仓库里提交了一个新的文件2.txt,下面删除它
rm -f 2.txt
git status //可以看到,提示2.txt文件被删除了
如果要想恢复,直接用  git  checkout -- 2.txt
现在是,我们想在git仓库里删除
git rm 2.txt
git commit -m "delete 2.txt" 

这样就彻底删除了2.txt


在当前目录: rm -f 2.txt ---> git rm 2.tx ---> git commit "delete 2.txt" --->完成!

---------------------------------------------------------------------------------------------------




7. 做一个远程仓库(github)

sign up 注册

sign in 登陆

首先到 https://github.com 注册一个账号,创建自己的git,点repositories  -->start a project 或者下面 new repositories

名字自定义,比如叫studygit  选择public (公共 &私有)  点 Create repository

里面有说明文档,。。。。


添加key:

右上角点自己头像哪里 +▼,选择settings,左侧选择SSH and GPG keys


右上角点New SSH key,

Title:填个日期吧。

key:         粘贴公钥     

把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里

#ssh-keygen 回车,就生成了秘钥对。再回车几下,就好了。

#cat /root/.ssh/id_rsa.pub 复制过来,到上面

添加好了之后,会收到邮件。

-----------------------------------------------


把本地参考推送到远程仓库

# cd /home/

#mkdir studygit

# cd studygit/

#git init  (初始化)本地的studygit库完成,需要与 远程的联系到一起

# git remote add origin [email protected]:aminglinux/studygit.git

//这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致
git push -u origin master  //然后把本地的studygit仓库推送到远程的studygit
下一次再推送,就可以直接 git push 了

-------------------------

#ls 

# vim aminglinux.txt 写入代码

#git add aminglinux.txt

#git commit -m "add aminglinux.txt"

#ls

# git push -u origin master

yes

完成了,下一次再推送,就可以直接 git push 

刷新浏览器页面里的项目,就可以看到了。

#ls 
# vim aminglinux.txt  再次写入代码

#git add aminglinux.txt

#git commit -m "new aminglinux.txt"  (本地完成更新)

git push (再次完成远程库,更新)刷新浏览器就可以看到


-------------------------------------------------------------





下面我们克隆一个远程仓库过来

其目的,就是把现成的,已有的创库位移复制。

#cd /home

#ls

# git clone  [email protected]:aminglinux/lanmp.git

          (git@网址地址 :用户/项目名字.git)就是lanmp创库的地址linux机器写法

它提示,会在当前目录下初始化一个仓库,并创建一个.git的目录
Initialized empty Git repository in /home/lanmp/.git/

完成后,ls可以看到一个lanmp的目录

#cd  lanmp

# ls    #ls -la   #cat config 查看url地址

# cat README.md  就可以查看到目录里面的消息了

------------------------------------------

# vi lanmp.sh 编辑一下文件,写内容。然后提交
# git add lanmp.sh

# git commit -m "gen gai de nirong  跟改文集之后的描述"   本地提交。!

------------------------------------------

连网 就可以 。再推送到远程服务端  !! 需要放公钥 才可以推送过去。!!! 开发需要用到这工具。
# git push

-----------------------------------------



8. 分支管理

查看分支,

开发分支,master 

#cd /home/studygit/

# git branch   运行此令,查看分支。 谁带 * 号表示当前分支

--------------------------------------


创建分支

#git checkout  aming

# git branch 


 *  aming  (有*号表示就切到aming分支了。)

    master



在aming分支下 ,编辑2.txt,并提交到新分支
echo "askdfjlksadjflk" >  2.txt
git add 2.txt

git commit -m "laksjdflksjdklfj" 


----------------------------------
切换回master分支

# git checkout master

# git branch  查看并无新建的刚才2.txt文件。

--------------------------------



合并分支

先切换到目标分支上,例如把master分支合并到aming上

#git checkout  aming

# git branch

 *  aming  (有*号表示当前分支了。)

    master

# git merge master    //把master分支合并到了aming

# git branch

-------------------------------------------------------


如果master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,

需要先解决冲突才可以继续合并。

解决冲突的方法是在master分支下,编辑2.txt,改为aming分支里面2.txt的内容。

 然后提交2.txt,再合并aming分支。

但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 

我们可以编辑2.txt内容,改为我们想要的,然后提交。

切换到aming分支,然后合并master分支到aming分支即可。

(倒着合并)合并分支有一个原则,那就是要把最新的分支合并到旧的分支。

也就是说merge后面跟的分支名字一定是最新的分支。

#cat 2.txt 直接查看

--------------------------------------------------------------

# git  branch -d aming  # 删除分支

# git branch -D aming  #如果分支没有合并,删除之前会提示,那我们就不想合并,强制删除


--------------------------------------------------------------------------------------------------

对于分支的应用,建议大家以这样的原则来:

防止:版本混乱,冲突。

master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上


创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master


开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支
Git _安装配置_第1张图片


----------------------------------------------------------------------------------------------
在dev分支合并bob分支的命令是:
git checkout dev   //先切换到dev分支,然后

git merge bob








9. git stash 保留现场


当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。

问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。

解决这个问题的办法就是git stash命令。



比如我们在aming分支,编辑了一个新的文件3.txt
这时候我们需要到其他分支去修复一个bug,所以需要先git add 3.txt
然后 git  stash  保存一下现场
再切换到另外分支去修复bug,修复完bug后,再回到aming分支
git stash list 可以看到我们保存过的现场
用 git stash apply 恢复现场
也可以指定stash:

git stash apply stash@{1}

---------------------------------------------------------------------

[root@YQ001 gitroot]# vim 3.txt   #:wq保存退出,桌add

[root@YQ001 gitroot]#git add 3.txt #提交到本地

[root@YQ001 gitroot]# ls
2.txt  3.txt

[root@YQ001 gitroot]# git branch
* master

那么消息来了,要改2.txt

[root@YQ001 gitroot]# vim 2.txt 
[root@YQ001 gitroot]# git add 2.txt  #改好之后提交动作

[root@YQ001 gitroot]# git commit -m "fix a bug 2.txt"
[master ff3678d] fix a bug 2.txt
 1 files changed, 4 insertions(+), 3 deletions(-)

[root@YQ001 gitroot]# git status  #提交之后,查看。发现多出3.txt 多出一行。
# On branch master
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
# 3.txt
nothing added to commit but untracked files present (use "git add" to track)

[root@YQ001 gitroot]# 就需要现在保留了,不让别人看到这个3.txt

[root@YQ001 gitroot]# git stash

No local changes to save          现场保留。,需要操作[root@YQ001 gitroot]#git add 3.txt #提交到本地

[root@YQ001 gitroot]# git add 3.txt
[root@YQ001 gitroot]# git stash
Saved working directory and index state WIP on master: ff3678d fix a bug 2.txt
HEAD is now at ff3678d fix a bug 2.txt

[root@YQ001 gitroot]# git status  #就没有任何显示了,完成保留现场了。
# On branch master
nothing to commit (working directory clean)

[root@YQ001 gitroot]# git stash list

------------------------------------------------------------------------------

[root@YQ001 gitroot]# ls  #并没有发现3.txt文件
2.txt

继续添加

[root@YQ001 gitroot]# vi 4.txt

[root@YQ001 gitroot]# git add 4.txt
[root@YQ001 gitroot]# git status #查看发现还有4.txt

# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
# new file:   4.txt
#

[root@YQ001 gitroot]# git stash  #保留现场
Saved working directory and index state WIP on master: ff3678d fix a bug 2.txt
HEAD is now at ff3678d fix a bug 2.txt

在查看

[root@YQ001 gitroot]# git stash list
stash@{0}: WIP on master: ff3678d fix a bug 2.txt
stash@{1}: WIP on master: ff3678d fix a bug 2.txt

# ls 查看发现 3.txt  4.txt都没有存在。

# git stash apply stash@{0}  # 恢复4.txt文件 ,也是恢复现场!

第三个 3.txt 也类似

git stash apply stash@{1}

# ls   #都出来了

# git status

可以继续编辑你的 3.txt   和 4. txt 文件,好了之后,任然 add

#git add 3.txt

#git commit -m " new jdslfjsl  3.txt"

没什么用,不入直接保存。变 复杂了

-----------------------------------------------------------------------------------------------------------







10. 远程分支

直接在页面上添加dev2, Branch dev ▼- 填入分支名dev2称-鼠标往下移动点击。完成添加,也可以删除。

查看远程库信息,使用git remote -v  

本地新建的分支如果不推送到远程,对其他人就是不可见的

查看远程分支  git ls-remote origin

从本地推送分支,使用git push origin branch-name,

如果推送失败,先用git pull抓取远程的新提交

在本地创建和远程分支对应的分支,

使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

下拉远程分支dev2到本地,并命令为dev2

git fetch origin dev2:dev2


#git checkout master

#




11. 标签管理

标签类似于快照功能,我们可以给版本库打一个标签,

记录某个时刻库的状态。我们可以随时恢复到该状态。

git checkout master 先切换到master分支上

(git tag show v1.0(查看详细情况,git tag -d show 删掉)

git tag v1.0  给master上的文件打一个标签v1.0

git tag 可以查看所有的标签

tag是针对commit来打标签的,所以可以针对历史的commit来打tag


git log --pretty=oneline --abbrev-commit  #行显示命令

git tag v0.9 46d3c1a     #针对某个文件打标签
git tag -a v0.8 -m "tag just v1.1 and so onm描述内容"  5aacaf4  //可以对标签进行描述

git tag -d v0.8  //删除标签


git push origin v1.0   //推送指定标签到远程
git push --tag origin   //推送所有标签

----------------------------------------------------------

如果本地删除了一个标签,远程也想要删除需要这样操作:


git tag -d v1.0        #本地删除 
git push origin :refs/tags/v1.0   #远程删除
------------------------------------------------------------------------

12. 巧用别名
git commit 这个命令是不是有点长? 用别名可以提高我们的工作xiaol
git config --global alias.ci commit 
git config --global alias.co  checkout
git config --global alias.br  branch

查看git别名使用命令, 列出命令单
git config --list |grep alias


[root@YQ001 ~]# cd /home/gitroot/

[root@YQ001 gitroot]# git config --global alias.lg  "log --pretty=oneline"
[root@YQ001 gitroot]# git lg

查询log小技巧:
[root@YQ001 gitroot]# git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

[root@YQ001 gitroot]# git lg

会显示出颜色。

别名所在的目录: cat  /root/.gitconfig



取消别名
git config --global --unset alias.br


13. 搭建git服务器

github毕竟是公开的,而私有仓库又得花钱买。

所以我们可以想办法搭建一个私有的,只自己公司使用的。

----------------------------------------------------------------

俩台机器,一客服端,一个服务端。

 俩机都裝: yum install git //安装git

# useradd -s /usr/bin/git-shell git   //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆

# cd /home/git 
# mkdir .ssh

# touch .ssh/authorized_keys


(客服端的ssh公钥 cat /root/.ssh/id_rsa.pub 复制到服务端。)


# chown -R git.git .ssh

# chmod 700 .ssh

(# chmod 600 .ssh/authorized_keys)


尝试登陆:

# ssh git@ ip


定好存储git仓库的目录,比如 /data/gitroot
mkdir -p /data/gitroot
cd /data/gitroot
git init --bare sample.git // 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git 结尾 sample.git 名字的创库。

但是并不能操作,什么命令。

chown -R git.git sample.git



在客户端上(自己pc)克隆远程仓库
以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的。
首先要把客户端上的公钥放到git服务器上/home/git/.ssh/authorized_keys文件里
git clone git@ i p :/data/gitroot/sample.git 克隆命令

此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程









你可能感兴趣的:(Git _安装配置)