初学Git及简单搭建git服务器和客户端

初识Git

Git是什么?

  Git是目前世界上最先进的分布式版本控制系统。

SVN与Git的最主要的区别?

  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
  Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

基本概念

工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

在linux上安装git作为服务器

linux系统环境:

[[email protected] ~]# cat /etc/issue
CentOS release 6.9 (Final)
Kernel \r on an \m

linux上作为我的git服务器

安装git

我这里使用的yum安装
[[email protected] ~]# yum install git
也可以使用源码安装,需要安装很多依赖包,下载地址 https://github.com/git/git/releases

    $ tar -zxf git-2.0.0.tar.gz
  $ cd git-2.0.0
  $ make configure
  $ ./configure --prefix=/usr
  $ make all doc info
  $ sudo make install install-doc install-html install-info

获取git版本

[[email protected] ~]# git version  #git版本
git version 1.7.1

git安装好后,创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码

[[email protected] ~]# useradd git
[[email protected] ~]# passwd git

创建版本库

在Disk文件夹下新建了一个文件夹名为repository
[[email protected] Disk]# mkdir repository
将repository初始化为git仓库
[[email protected] repository]# git init
该命令将创建一个名为 .git 的子目录,是隐藏的,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。

[[email protected] repository]# ll -a
drwxr-xr-x.  8 root root 4096 1月   8 17:35 .git

我从网上查到,如果初始化远程仓库的话,要使用这个命令:git init --bare repository.git
这样初始化的仓库并没有.git目录,只有.git目录下的文件。
不使用--bare选项时,就会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下;而使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面
用"git init"初始化的版本库用户也可以在该目录下执行所有git方面的操作。但别的用户在将更新push上来的时候容易出现冲突。
解决办法就是使用”git init --bare”方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误(”This operation must be run in a work tree”),这个就是最好把远端仓库初始化成bare仓库的原因。

说白了,就是会创建一个裸仓库,裸仓库没有工作区,服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
然后,把仓库所属用户改为git:
[[email protected] Disk]# chown -R git:git repository.git

在windows上安装git作为客户端

安装git

下载地址:http://gitforwindows.org/
直接安装即可,安装后在开始菜单里会有git bash、git GUI和git CMD

设置用户名、邮箱

因为Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识。
每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
打开git bash

如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。

[[email protected] ~]# git config --list
user.name=xxx
[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
......

将linux服务端和windows客户端关联起来

客户端生成ssh私钥和公钥

想要他们连接的话要创建证书登录
收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
打开windows的git bash,输入ssh-keygen -t rsa -C “邮箱”,生成ssh私钥和公钥

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

服务器端 Git 打开 RSA 认证

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

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

保存并重启 sshd 服务:
[[email protected] ssh]# /etc/rc.d/init.d/sshd restart

将客户端公钥加到服务器

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

[[email protected] git]# pwd
/home/git
[[email protected] git]# mkdir .ssh
[[email protected] git]# ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla .ssh

然后把 .ssh 文件夹的 owner 修改为 git,为.ssh和authorized_keys修改权限

[[email protected] git]# chown -R git:git .ssh
[[email protected] git]# chmod 700 .ssh
[[email protected] git]# touch .ssh/authorized_keys
[[email protected] git]#chmod 600 .ssh/authorized_keys

将客户端公钥id_rsa.pub文件的内容写到服务器端 /home/git/.ssh/authorized_keys 文件里

在客户端clone远程仓库

将服务器上的/opt/repository/gittest.git库克隆到本地了

可以看到本地上的服务器仓库了

在客户端远程仓库并提交代码

先在linux本地init一个仓库,在里面随意编辑一个文件,在本地提交,然后连接远程仓库,将文件push到服务器上,在服务器上git log一下,可以看到你提交的历史记录

origin指默认情况下的远端库的名字。

基础命令

我是在linux上操作的,算是本地仓库吧,不涉及远程库;在linux上操作与在windows上相同

把文件添加到版本库中

编辑一个readme.txt文件,将文件加入版本库中
[[email protected] repository]# git add readme.txt #将工作区中的文件添加到暂存区了

将文件提交到版本库

[[email protected] repository]# git commit -m “提交readme”
-m 是提交信息,便于查看提交了什么东西,这一步是将暂存区中的文件提交到仓库了

查看是否还有文件未提交

[[email protected] repository]# git status
#On branch master
nothing to commit (working directory clean)

这样说明没有任何文件未提交,工作区是干净的

修改readme文件后保存,不进行任何操作,再查看状态

[[email protected] repository]# git status
#On branch master
#Changed but not updated:
#(use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

上面的命令告诉我们 readme.txt文件已被修改,但是并没有提交

查看readme.txt文件修改了什么内容

[[email protected] repository]# git diff
diff --git a/readme.txt b/readme.txt
index 92e045e..d94ee74 100644
--- a/readme.txt
+++ b/readme.txt
@@ -5,4 +5,3 @@
 666666
 777777
 999999
-000

可以看到,少了一行000
知道了对readme.txt文件做了什么修改后,我们可以放心的提交到仓库了,提交修改和提交文件是一样的2步(第一步是git add 第二步是:git commit)。

[[email protected] repository]# git add readme.txt
[[email protected] repository]# git commit -m "readme删除000"

查看历史记录

[[email protected] repository]# git log
commit ffc46d25feacd0ae1926ace37efecd116402503e    #版本号
Author: bai <[email protected]>
Date:   Tue Jan 9 16:49:18 2018 +0800

    readme删除000       #最近一次提交内容,也就是commit -m 写的内容

commit 1fac1a93037444bfbd59e51b57c511aaa0a9578f
Author: bai <[email protected]>
Date:   Mon Jan 8 11:26:26 2018 +0800

    readme增加222222

commit 876477f1b209ba61de4248ff26c2c1a098520295
Author: bai <[email protected]>
Date:   Mon Jan 8 11:20:45 2018 +0800

    提交readme.txt

如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline

[[email protected] repository]# git log --pretty=oneline
ffc46d25feacd0ae1926ace37efecd116402503e readme删除000
1fac1a93037444bfbd59e51b57c511aaa0a9578f readme增加222222
876477f1b209ba61de4248ff26c2c1a098520295 提交readme.txt

版本回退

[[email protected] repository]# git reset --hard HEAD^ #回退到上一版本

[[email protected] repository]# git log
commit 1fac1a93037444bfbd59e51b57c511aaa0a9578f
Author: bai <[email protected]>
Date:   Mon Jan 8 11:26:26 2018 +0800

    readme增加222222

commit 876477f1b209ba61de4248ff26c2c1a098520295
Author: bai <[email protected]>
Date:   Mon Jan 8 11:20:45 2018 +0800

    提交readme.txt

可以看到删除000的操作没有了
如果想要回退到上上个版本就把HEAD^ 改成 HEAD^^,以此类推

回退到指定版本

[[email protected] repository]# git reset HEAD 版本号

获得版本号

[[email protected] repository]# git reflog
19ecf86 [email protected]{0}: HEAD^: updating HEAD
ffc46d2 [email protected]{1}: commit: readme删除000

ffc46d2就是版本号

撤销修改

1.如果已经提交了的话,就直接回退到上一版本
2.如果没有添加到暂存区的话,使用git checkout -- 文件名 撤销工作区的所有修改
[[email protected] repository]# git checkout -- readme.txt
3.如果已经添加到暂存区的话,想丢弃修改
[[email protected] repository]# git reset HEAD readme.txt
然后再重复第二步

删除文件

[[email protected] repository]# git rm readme.txt
[[email protected] repository]# git commit -m “删除readme”

创建分支

[[email protected] repository]# git checkout –b fenzhi
这个命令相当于两条命令
git branch fenzhi   创建分支
git checkout fenzhi   切换到该分支

查看当前分支

[[email protected] repository]# git branch
* fenzhi
 master

带星号的则代表当前在该分支上

合并分支

[[email protected] repository]# git merge --no-ff fenzhi
在分支上修改内容后,与主分支合并

删除分支

[[email protected] repository]# git branch -d fenzhi

原文地址:http://blog.51cto.com/xinsir/2059573

时间: 2024-10-10 14:53:51

初学Git及简单搭建git服务器和客户端的相关文章

Ubuntu简单搭建git私有服务

git服务器搭建过程 搭建git服务器过程记录 如下: 环境: 服务器Ubuntu虚拟机(Boss),能通过网络访问到(服务器地址:192.168.9.103). 客户端Win7电脑一台(work) 软件需求: 客户端软件msysgit:http://msysgit.github.io/ 软件版本:Git-1.9.2-preview20140411.exe 客户端软件TortoiseGit:http://dl.oschina.net/soft/tortoisegit 软件版本:TortoiseG

(转)C# Socket简单例子(服务器与客户端通信)

本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721 这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消息边界问题.端口号是否被占用.消息命令的解析问题等.. 下面是两个程序的代码,(两个程序均为控制台程序) 先发服务端的(Server)完整代码如下: 引入命名空间: [cshar

创业公司十分钟简单搭建GIT私有库

一.背景 小公司,协同开发的人不多,建gitlab比较麻烦,只需要在Server端建立一个简单的git共享库就OK. 二.建立仓库 Server端: 1.在Server端建立项目目录.mkdir sample 2.在sample中执行git -bare init,生成sample.git目录,这个目录是个共享库,所有代码在该目录下. 本地端: 1.clone远程共享库,目前还是空的:git clone [email protected]:/home/project/sample.git 2.本地

vlc简单搭建流媒体服务器

vlc:一款开源的强大媒体播放器,还可以作为流媒体服务器和客户端:官网为:http://www.videolan.org/vlc/ vlc支持多种媒体格式和网络协议,当然包括我最关心的RTSP+MPEG2-TS/UDP, 老实说在经历了从Darwin到live555然后的折腾,发现vlc在流媒体服务器方面是基于live555, 而解码方面是基于ffmpeg的: vlc作为客户端就简单了:比如要在本机监听54321端口(目前我做实验用的port)上的UDP流,其实就是模拟On Demand Cli

简单搭建web服务器

第一章实验(一):搭建web服务器 1.环境准备: 开启一台centos6.5系统的虚拟机作为web服务器,确认ip地址为192.168.100.150,网关为192.168.100.100,dns为192.168.100.100. 另外一台同样系统的虚拟机,ip地址为192.168.100.100  作为dns服务器 首先设置主机名,保证主机名和web服务器的域名相同: [[email protected] ~]# cat /etc/sysconfig/network   ##设置主机的FQD

使用nodejs分别搭建一个服务器和客户端,模拟问答精灵

嘻嘻.最近在玩nodejs,在我的学习以及理解中nodejs的执行环境主要是分为三个部分的,首先会有一个global的全局对象,然后在这个全局对象中又包含有一个核心模块和文件模块(可以理解为是用户自己写的文件)的. 并且nodejs具有两个特点的,那就是1.是一个非阻塞的I/O模型,也就是说nodejs的操作是异步的.2.是基于事件驱动的程序设计思想的. 今天主要是通过自己搭建服务器和客户端,让两者之间进行通信,模拟出类似问答精灵的一个效果的.在这之前,我们是很有必要了解一下服务器与浏览器之间是

Azure搭建SVN服务器及客户端简介

SVN是版本控制器,自从用了它,我就根本离不开他了.团队工作中,用它能够防止冲突,进行版本控制.个人工作中,利用他也能够带来很多方便. 首先弄清楚一点,svn分成服务端和客户端.SVN服务器就相当于apache服务器,客户端就相当于浏览器,客户端不会在乎你是哪个软件/哪个系统(Windows下的TortoiseSVN还是Mac下的Versions). 下面我介绍如何在Azure平台上搭建SVN服务器 服务器端 1.创建Azure虚拟机.具体见:http://www.kangry.net/blog

CentOS7搭建NTP服务器及客户端同步时间

一.服务器配置 1.查看服务器.客户端操作系统版本 [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 2.查看服务器是否安装ntp,系统默认安装ntpdate: [[email protected] ~]# rpm -qa | grep ntp fontpackages-filesystem-1.44-8.el7.noarch ntpdate-4.2.6p5-28.el7.cen

linux 简单搭建git服务器

如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. 生成 SSH 公钥 每个需要使用git服务器的工程师,自己需要生成一个ssh公钥进入自己的~/.ssh目录,看有没有用 文件名 和 文件名.pub 来命名的一对文件,这个 文件名 通常是 id_dsa 或者 id_rsa. .pub 文件是公钥,另一个文件是密钥.假如没有这些文件(或者干脆连 .ssh 目录都没有),你可以用 ssh-keygen 的程序来建立它们,该程序在 Linux/Mac 系统由 SSH 包提