linux搭建git服务器

发表于 2021-02-08 17:30:02, 分类:技术文档

Linux服务器配置之Git服务器搭建步骤:


一、配置环境


1、服务器:lCentOS 7.2(64位) + Git (version 1.8.3.1)

2、客户端:Windows 10 Pro(64位) + Git(version 2.11.0.windows.1)

3、服务器连接软件:Xshell 6


二、配置步骤


1、安装git 服务端

Linux作为服务器端系统,Windows作为客户端系统,分别安装Git

服务器端


[admin@ceontOS ~]$ su root                  #切换到root用户名


Password:                                   #输入root用户的密码


[root@ceontOS ~]# yum install -y git        #执行该命令进行Git安装


 


安装完后,查看Git版本


[root@ceontOS ~]# git --version


git version 1.8.3.1


   


客户端:

下载 Git for Windows,地址:https://git-for-windows.github.io/

安装完之后,可以使用 Git Bash 作为命令行客户端。

安装完之后,查看 Git 版本


$ git --version


git version 2.11.0.windows.1




 


Git客户端安装具体可参考:Git安装及SSH Key管理之Windows篇


 


2、服务器端创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码


 


[root@ceontOS ~]# cd /home                                  #进入/home/目录


[root@ceontOS home]# id git                                 #查看git用户是否存在


id: git: no such user                                       #提示git用户不存在


[root@ceontOS home]# useradd git                            #创建git用户


[root@ceontOS home]# passwd git                             #为git用户创建密码


Changing password for user git.


New password:                                               #设置密码


BAD PASSWORD: The password is shorter than 8 characters


Retype new password:                                        #确认密码


passwd: all authentication tokens updated successfully.


   


 


3、服务器端创建 Git 仓库

设置 mkdir -p home/git/maitui.git 为 Git 仓库


 


 


[root@ceontOS home]#mkdir -p home/git/maitui.git   #在git用户目录下创建仓库目录git,并且创建fenlin88l.git项目测试目录


注:git  fenlin88l.git是自建目录 maitui.git为仓库名

[root@ceontOS home]# ls      #查看/home/目录下有哪些用户目录

admin git

[root@ceontOS home]# cd git   #进入git用户目录

[root@ceontOS git]# ls      #查看git用户目录下有哪些目录/文件

 fenlin88l.git 




[root@ceontOS git ]# git init --bare ./maitui.git    #这步很重要,初始化项目测试目录



Initialized empty Git repository in /home/git/maitui.git/


 


然后把 Git 仓库的 owner 修改为 git


 


或执行  git init --bare home/git/maitui.git


    


[root@ceontOS git]#  ll      #查看maitui.git项目文件夹的拥有者

total 4

drwxr-xr-x 3 root root 4096 Jan 13 13:08 maitui.git    #拥有者是root用户名



[root@ceontOS git]# chown -R git:gitmaitui.git/    #将拥有者改为git用户


     

[root@ceontOS git]# ll      #再次查看maitui.git项目文件夹的拥有者

  #拥有者是git用户 如下


    


4、客户端 clone 远程仓库


先在本地Windows系统上创建一个存放git项目的文件夹,例如我的设置在:【D:\git\fenlin88】


  


此处通过Git Bash来创建的,当然也可以手动创建该目录,然后进入该目录,启动Git Bash


 #在桌面打开的git bash



$ cd d:   #进入D盘


    

$ mkdir git  #创建git文件夹

   

$ cd git   / #进入git文件夹创建maitui文件夹


  

$ git clone  git@服务器公网IP地址:/home/git/maitui.git    #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径


![](http://upload-images.jianshu.io/upload_images/2267589-7bedba534bdc9f04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


例:  git clone git@47.107.193.147:/home/git/maitui.git


 


当第一次连接到目标 Git 服务器时会得到一个提示:


The authenticity of host '118.178.142.77 (118.178.142.77)' can't be established.

ECDSA key fingerprint is SHA256:JwC9NxLIjBGqtLC2NUk8MulSc3XH3mM5AWMcFz0a5/8.

Are you sure you want to continue connecting (yes/no)? yes


选择 yes:


Warning: Permanently added '118.178.142.77' (ECDSA) to the list of known hosts.


   


 


此时 C:\Users\用户名\.ssh 下会多出一个文件 known_hosts,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。


【说明】如果你的服务器没有配置SSH连接,那么按照正常情况会让你输入git用户的密码,输入正确后就能进行项目克隆了。


![](http://upload-images.jianshu.io/upload_images/2267589-776f44a088bba653.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


 


如果不采用 SSH 公钥来进行验证,则每次都要输入密码,很麻烦,下面就来配置SSH公钥验证的方式来clone项目


 


 


   问题:如果不配置ssh公钥使用git远程仓库会怎么样,会出现以下:


          


5、客户端创建 SSH 公钥和私钥


 


ssh-keygen -t rsa -C "987679265@qq.com"


 


管理了多个ssh_key,所以这边给公私钥起了个名字:id_rsa_git,生成后需要进行**ssh-add**操作,如何管理多个ssh_key可以参考:[Git安装及SSH Key管理之Windows篇](http://www.jianshu.com/p/a3b4f61d4747)


![](http://upload-images.jianshu.io/upload_images/2267589-f781abf1bff6be8f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


 


此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub


id_rsa_git 是私钥


id_rsa_git.pub 是公钥


![](http://upload-images.jianshu.io/upload_images/2267589-a5b6810e27a15c93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


 


6、服务器端修改配置文件,打开 RSA 认证


进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:


[root@ceontOS ~]# sudo vi /etc/ssh/sshd_config    #root用户下,编辑/etc/ssh/sshd_config文件


 


按如下设置这三个配置,如果注释掉了,则去掉前面的#号


RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys


保存并重启 sshd 服务:


sudo service sshd restart  #重启sshd服务


 


由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys


在 /home/git/ 下创建目录 .ssh


 


 


[root@ceontOS ~]# cd /home/git

[root@ceontOS git]# pwd

/home/git

[root@ceontOS git]# mkdir  .ssh

[root@ceontOS git]# ls  -a

. .. .bash_logout .bash_profile .bashrc repository .ssh


然后把 .ssh 文件夹的 owner 修改为 git


 


[root@ceontOS git]# chown -R git:git .ssh



[root@ceontOS git]# ll -a | grep .ssh

drwxr-xr-x 2 git git 4096 Jan 13 14:54 .ssh


 


7、将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件


回到客户端Git Bash 下,导入文件:


$ ssh git@服务器公网IP地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa_git.pub



回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:


[root@ceontOS ~]# cd /home/git/.ssh/

[root@ceontOS .ssh]# ll

total 4

-rw-rw-r-- 1 git git 398 Jan 13 15:03 authorized_keys

[root@ceontOS .ssh]# cat authorized_keys    #查看客户端生成的公钥


 


重要:


修改 .ssh 目录的权限为 700


修改 .ssh/authorized_keys 文件的权限为 600


[root@ceontOS git]# chmod 700 .ssh

[root@ceontOS git]# cd .ssh/

[root@ceontOS .ssh]# chmod 600 authorized_keys


 


客户端再次 clone 远程仓库

 Eg:


git clone git@118.178.142.77:/home/git/fenlin88l.git



 


9、禁止 git 用户 ssh 登录服务器


之前在服务器端创建的 git 用户不允许 ssh 登录服务器


编辑 /etc/passwd


[admin@ceontOS ~]$ su root   #切换到root用户

Password:

[root@ceontOS admin]# sudo vi /etc/passwd  #编辑/etc/passwd文件


找到:


git:x:1001:1001::/home/git:/bin/bash


修改为:


git:x:1001:1001::/home/git:/bin/git-shell


此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。


 


 


 


Windows下客户端操作


在客户端打开Git Bash,然后将目录切换到指定文件夹下面下。执行下面命令,将该文件夹设为本地仓库


 


git init   初始化 


 


接着再执行如下命令,将本地仓库连接到服务器上的仓库:


git remote add origin git@公网服务器ip:/home/git/fenlin88l.git


 


简单说一:192.168.1.10是服务器的地址;“@”符号前面的git是服务器的登录名,如果前面没有添加组合git用户,也是可以用已经存在的用户名,冒号”:”的后面的是仓库所在的地址,如果地址前面有“/”使用的是绝对地址,如果没有,就是相对与登录用户的根目录下。接下来的其他操作就和前面说的向github.com上传文件一样了。可以到Git的简单使用看看。


Git仓库的克隆


有时我们需要在不同的电脑上使用同一份代码,这是就需要将代码从服务器上克隆下来。打开Git Bash,然后将目录切换到指定的目录下面,运行一下命令:


git init


git clone git@192.168.1.10:/home/git/fenlin88l.git


 


 


就可以将服务器上面的代码下载到本地。clone后面的命令和上面remote add origin 后面的代码的意思是一样的。


 


 


 


 


如果出现以下这种问题,解决办法:


https://blog.csdn.net/u014343528/article/details/48787221


 


1.在终端输入。


ssh-keygen -t rsa -C "username" (注:username为你git上的用户名)


如果执行成功。返回








 


或:


 


  https://blog.csdn.net/huahua78/article/details/52330792


   查看远端地址 git remote –v


查看配置 git config --list


      


#git status


     


  


git add .  // 暂存所有的更改


 git checkout . // 丢弃所有的更改


 git status // 查看文件状态


 git commit -m "本次要提交的概要信息" // 提交


  


设置远端仓库地址 git remote set-url origin 你的远端地址

git push origin master出现以下情况:


   


解决办法:删除当前key,然后重新生成key,


     


会在本地C:\Users\你的用户名.ssh生成文件夹,里面有id_rsa和id_rsa.pub两个文件

然后复制id_rsa.pub文件里面的内容,到https://github.com/settings/keys新建一个,


   


设置远程地址:(上面新建的)

git remote add origin_new 新的地址

git remote –v查看

git push origin_new master重新推送

下面是设置用户名

Git config –global user.name “用户名”

git config –global user.email 邮箱地址


设置代理:

git config –global https.proxy http://127.0.0.1:1080

取消设置代理:

git config –global –unset https.proxy


取消git init操作时出现 rm: cannot remove ‘.git’: Is a directory

是因为输入的命令是: rm -f .git

解决办法:rm -rf .git 即删除整个.git目录


failed to push some refs to ‘git@github.com:*.git’ hint: Updates were rejected ···

使用git push origin master的时候出现一下错误:


     


解决办法:

git push -f origin master或者git pull下


   


恢复不小心删除的 git stash 文件:


   git fsck  //找到dangling的对象


git show id  //上面列出的每一条记录的最后一个字符串,按 enter 查看具体信息


git stash apply id


 


Git回滚提交


     //reset将一个分支的末端指向另一个提交。这可以用来移除当前分支的一些提交, 让master分支向后回退了两个提交


git checkout master


git reset HEAD~2


//Revert撤销一个提交的同时会创建一个新的提交, 找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。


git revert HEAD~2


 


 


错误:Please enter a commit message to explain why this merge is necessary. 解决办法:

1. (可选)按键盘字母 i 进入insert模式

2. (可选)修改最上面那行黄色合并信息

3. 按键盘左上角”Esc” (退出insert模式)

4. 输入”:wq”,按回车键即可(提交)


gitignore notworking:


git rm -r --cached .


git add .


git commit -m "fixed untracked files"


 


git Failed to connect to www.google.com port 80: Timed out 可能是因为设置了代理:


git config --global http.proxy          //查看代理


git config --global --unset http.proxy  //取消代理


 


HTTP Basic access denied on Git:


git config --global --unset credential.helper


git clone '···'


login username,password


 


rebase 和 merge 区别


git pull --rebase origin master


 


rebase 选项告诉 Git 把你的提交移到同步了中央仓库修改后的 master 分支的顶部。rebase 操作过程是把本地提交一次一个地迁移到更新了的中央仓库master分支之上。这意味着可能要解决在迁移某个提交时出现的合并冲突,而不是解决包含了所有提交的大型合并时所出现的冲突。这样的方式让你尽可能保持每个提交的聚焦和项目历史的整洁。反过来,简化了哪里引入Bug的分析,如果有必要,回滚修改也可以做到对项目影响最小。


git pull origin master


 

如果没有 rebase, pull 操作仍然可以完成,但每次 pull 操作要同步中央仓库中别人修改时,提交历史会以一个多余的『合并提交』结尾。

合并玩冲突之后,git rebase --continue,Git 会继续一个一个地合并后面的提交,如其它的提交有冲突就重复这个过程。

如果你碰到了冲突,但发现搞不定,不要惊慌。只要执行下面这条命令,就可以回到你执行git pull –rebase命令前的样子:git rebase --abort


河南日头软件技术有限公司

地址:河南省郑州市惠济区绿环路137号北尚苑3楼329室(绿环路与丰业街交叉口向东50米路南)

电话:13592545108

邮箱:923450617@qq.com

Copyright © 2017 - 2024 日头软件 ICP备案号: 豫ICP备18012734号-3 管理