ローカルサーバをセットアップGitは

まず、環境

CentOSのLinuxのリリース1804年7月5日(コア) 

二、gitのサーバ通信プロトコル

ローカルプロトコル(ローカル)

最も基本的には、リモートリポジトリは、ハードディスク内のディレクトリであるローカルプロトコル(ローカルプロトコル)、です。これは、すべてのチームメンバーは、(例えばNFSマウントなど)の共有ファイルシステムへのアクセス権を持っている、または人の比較的まれなケースが同じコンピュータを共有して一般的です。すべてのコードのリポジトリと同じコンピュータ上で永遠の場合は、より多くの壊滅的な損失が発生する可能性があるため、後者は、理想的ではありません。

共有ファイルシステムを使用している場合は、ライブラリークローンのローカルバージョン(クローン)、プッシュ(プッシュ)から(プル)を引くことができます。リポジトリのクローンを作成するか、既存のプロジェクトにリモートを追加し、URLとしてリポジトリパスを使用するようにしたいです。たとえば、ローカルリポジトリをクローンには、次のコマンドを実行することができます
$ gitのクローン/opt/git/project.gitを

か、このコマンドを実行することができます:
$ gitのクローンファイル:///opt/git/project.gitを

URLの先頭に明示的にファイルを指定した場合://を、そしてGitの動作が若干異なります。あなただけのパスを指定すると、Gitはハードリンク(ハードリンク)を使用するか、または直接、必要なファイルをコピーしようとします。あなたは、ファイルを指定した場合://を、Gitは通常はデータのネットワーク伝送のために使用されるプロセスをトリガーする、それは通常のプロセスの下伝送効率です。ファイルを指定します。//主な目的は、ライブラリのバージョンのクリーンコピーの外部リファレンス(余分参照)またはオブジェクト(オブジェクト)を取得しないことです-通常、他のバージョン管理システムからインポートした後、またはいくつかの同様の状況はそうする必要があります。それは通常、高速であるため、ここでは、通常のパスを使用します。既存のGitプロジェクトにローカルリポジトリを追加するには、次のコマンドを実行することができます。

$ gitのリモートlocal_projの/opt/git/project.gitを追加します

その後、あなたはプッシュとしてなどを更新し、リモートリポジトリからのネットワーク上で引っ張ることができます。
利点
ファイルベースのリポジトリシステムの利点は、簡単で、直接使用する既存のファイルアクセス権やネットワークアクセスです。あなたのチームは、共有ファイルシステムを持っている場合。それはちょうど、誰もがそれに良いの読み取り/書き込みアクセス権限を設定することができますパスに裸のリポジトリのコピーのような他の共有ディレクトリを設定するようなものです。この方法は、他の誰かの作業ディレクトリから更新を引くために迅速です。あなたや他の人が、彼はあなたがリポジトリから更新をプルしたいプロジェクトで一緒に働いていた場合は、同様の実行

gitのプル/ホーム/ジョン/プロジェクト比指令プッシュサービス再開はるかに簡単。

欠点は
、この方法の欠点は、共有ファイル・システム、および複数の場所からアクセス不便であり、基本的なネットワーク接続、よりアクセスを構成するために、一般的にはより困難です。あなたは自宅からコンテンツをプッシュする場合は、まず、ネットワーク接続、不便で遅い設定にアクセスするために比較して、リモートディスクをマウントする必要があります。それはあなたが同様の共有マウントシステムを使用している場合は、このアプローチは必ずしも最速ではないということである言及する価値があります。ローカルリポジトリの高速データアクセス速度は、あなたと同じであるにアクセスします。同じサーバー上に、GitはSSH経由でアクセスするよりも遅いリポジトリにアクセスするために、通常はNFS経由して、ローカルハードディスクへのアクセスを許可する場合。最終的には、契約は偶発的な損傷を避けるために倉庫を保護しません。各ユーザーは、完全なシェルアクセス「リモート」ディレクトリがあり、ファイルや内部のGitリポジトリへの損傷を変更または削除からそれらを停止する方法はありません。

HTTPプロトコル

GitはHTTPを介した通信の2つのモードがあります。Gitの1.6.6バージョンの前に利用できる唯一の方法は、非常に単純で、通常は読み取り専用モードです。GitはSSHネゴシエーションやデータの伝送のようにスマートになるようにGit 1.6.6バージョンは、新しい、よりインテリジェントなプロトコルを紹介します。数年後、その単純に、この新しいHTTPプロトコルは、知能は非常に人気になります。一般的に「スマート」HTTPプロトコルとして知られているHTTPプロトコルの新しいバージョンは、古いバージョンは、一般的に「ダム」HTTPプロトコルと呼ばれています。私たちは、最初の新しい「スマート」HTTPプロトコルを見てください。

スマート(スマート)HTTPプロトコル
「スマート」動作モードのHTTPプロトコルおよびSSH、およびGitのプロトコル似ていますが、標準のHTTP / S HTTPポート上で動作し、それはSSHプロトコルを使用して、より容易になります意味認証メカニズムの多様性を、使用することができますこのようSSH公開鍵を設定しなくても、許可されたユーザ名/パスワードのためのHTTPプロトコルの基礎を使用するなど、より多くの。スマートHTTPプロトコルはGitのを使用するための最も一般的な方法であったかもしれない、それはgitのようにサポートすることです:SSHのような同じプロトコルを転送する際に匿名サービスとして//プロトコルの設定は、認証と暗号化を提供することができます。そして、唯一のURL、あなたはさまざまなニーズに異なるURLを設定する必要がなくなり、行っていることができます。あなたがにプッシュしようとしている場合は、サーバーを承認する必要性を(一般的な、必要)、サーバーは、ユーザー名とパスワードを入力するように求められます。サーバは同じからデータを取得する場合。、そしてあなたは、クローン(あなたが権限を持っている場合)を使用してプッシュしている:実際には、GitHubのサービスと同様に、あなたは(//github.com/schacon/simplegit []、HTTPSは、例えば)ウェブページのURLでご覧ください同じ。

ダム(ダム)HTTPプロトコル
サーバーは、インテリジェントサービスのHTTPプロトコルを提供していない場合は、Gitのクライアントは、より簡単な「ダム」HTTPプロトコルを使用しようとします。通常のファイルとして扱われるだけ裸のレポジトリWebサーバーでのダムHTTPプロトコルは、ファイルサービスを提供しています。セットアップが簡単であるダムHTTPプロトコルの美しさ。基本的には、ちょうど更新後のフックがそれに呼び出された設定、HTTPルートディレクトリに裸のリポジトリを必要とします。この時点で、あなたのリポジトリ上のWebサーバへのアクセス限り、あなたはあなたのリポジトリのクローンを作成することができます。ここからリポジトリへのHTTPアクセスを設定する方法は次のとおりです。

CD $は/ var / WWW / htdocsに/
$ Gitのクローン--bare /パス/に/ git_project gitproject.git
$ CD gitproject.git
$ミュージックビデオフック/ POST-update.sampleフック/ POST-更新
$フックのchmod A + X /更新後は、
それを行う必要があります。Gitは、適切なコマンド(git update-server-info)を実行し、更新後のフックデフォルトが付属し 、 フェッチ操作をクローニングHTTP経由で正常な動作を保証します。あなたはSSH経由のリポジトリにプッシュした後、このコマンドが実行されます。その後、他の人は、このようなコマンドによりクローニングすることができます。

$ Gitのクローンhttps://example.com/gitproject.git
ここでは、共通パスは/ var / www /のhtdocsにしてApacheがインストールされた使用していますが、任意の静的なWebサーバーを使用することができます-ちょうどに裸のリポジトリを置きます正しいディレクトリをすることができます。Gitのデータは、静的の形で提供される基本的な文書です。通常の間で選択して、スマートHTTPサービスと単純な読み取り専用ダムHTTPサービスを読取り/書込み提供されます。どちらも、めったにサービスを提供するために混合されません。

优点
我们将只关注智能 HTTP 协议的优点。不同的访问方式只需要一个 URL 以及服务器只在需要授权时提示输入授权信息,这两个简便性让终端用户使用 Git 变得非常简单。相比 SSH 协议,可以使用用户名/密码授权是一个很大的优势,这样用户就不必须在使用 Git 之前先在本地生成 SSH 密钥对再把公钥上传到服务器。对非资深的使用者,或者系统上缺少 SSH 相关程序的使用者,HTTP 协议的可用性是主要的优势。与 SSH 协议类似,HTTP 协议也非常快和高效。你也可以在 HTTPS 协议上提供只读版本库的服务,如此你在传输数据的时候就可以加密数据;或者,你甚至可以让客户端使用指定的 SSL 证书。另一个好处是 HTTP/S 协议被广泛使用,一般的企业防火墙都会允许这些端口的数据通过。

缺点
在一些服务器上,架设 HTTP/S 协议的服务端会比 SSH 协议的棘手一些。除了这一点,用其他协议提供Git 服务与 “智能” HTTP 协议相比就几乎没有优势了。如果你在 HTTP 上使用需授权的推送,管理凭证会比使用 SSH 密钥认证麻烦一些。然而,你可以选择使用凭证存储工具,比如 OSX 的 Keychain 或者 Windows 的凭证管理器。参考 “凭证存储” 如何安全地保存 HTTP 密码。

SSH 协议

架设 Git 服务器时常用 SSH 协议作为传输协议。因为大多数环境下已经支持通过 SSH 访问 —— 即使没有也比较很容易架设。SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易。通过 SSH 协议克隆版本库,你可以指定一个 ssh:// 的 URL:

$ git clone ssh://user@server/project.git
或者使用一个简短的 scp 式的写法:
$ git clone user@server:project.git
你也可以不指定用户,Git 会使用当前登录的用户名。
优势
用 SSH 协议的优势有很多。首先,SSH 架设相对简单 —— SSH 守护进程很常见,多数管理员都有使用经验,并且多数操作系统都包含了它及相关的管理工具。其次,通过 SSH 访问是安全的 —— 所有传输数据都要经过授权和加密。最后,与 HTTP/S 协议、Git 协议及本地协议一样,SSH 协议很高效,在传输前也会尽量压缩数据。

缺点
SSH 协议的缺点在于你不能通过他实现匿名访问。即便只要读取数据,使用者也要有通过 SSH 访问你的主机的权限,这使得 SSH 协议不利于开源的项目。如果你只在公司网络使用,SSH 协议可能是你唯一要用到的协议。如果你要同时提供匿名只读访问和 SSH 协议,那么你除了为自己推送架设 SSH 服务以外,还得架设一个可以让其他人访问的服务。

Git 协议

Git 协议是包含在 Git 里的一个特殊的守护进程;它监听在一个特定的端口(9418),类似于 SSH 服务,但是访问无需任何授权。要让版本库支持 Git 协议,需要先创建一个git-daemon-export-ok 文件 —— 它是 Git 协议守护进程为这个版本库提供服务的必要条件 ——但是除此之外没有任何安全措施。要么谁都可以克隆这个版本库,要么谁也不能。这意味这,通常不能通过 Git 协议推送。由于没有授权机制,一旦你开放推送操作,意味着网络上知道这个项目 URL 的人都可以向项目推送数据(所以一般不会使用)。

优点
目前,Git 协议是 Git 使用的网络传输协议里最快的。如果你的项目有很大的访问量,或者你的项目很庞大并且不需要为写进行用户授权,架设 Git 守护进程来提供服务是不错的选择。它使用与 SSH 相同的数据传输机制,但是省去了加密和授权的开销。

缺点
Git 协议缺点是缺乏授权机制。把 Git 协议作为访问项目版本库的唯一手段是不可取的。一般的做法里,会同时提供 SSH 或者 HTTPS 协议的访问服务,只让少数几个开发者有推送(写)权限,其他人通过git:// 访问只有读权限。Git 协议也许也是最难架设的。它要求有自己的守护进程,这就要配置xinetd 或者其他的程序,这些工作并不简单。它还要求防火墙开放 9418 端口,但是企业防火墙一般不会开放这个非标准端口。而大型的企业防火墙通常会封锁这个端口。


 

三、构建git服务器

使用共享的方式创建git服务器

1、安装Samba服务

yum install -y samba

2、创建Samba用户

2.1创建本地用户

[root@bogon ~]# useradd git_user_read    # 只读用户
[root@bogon ~]# useradd git_user_write   # 只写用户

2.2映射Samba用户

[root@bogon ~]# pdbedit -a git_user_read
new password:               # 输入密码
retype new password:     # 确认密码
Unix username:        git_user_read
...
[root@bogon ~]# pdbedit -a git_user_write
new password:               # 输入密码
retype new password:     # 确认密码
Unix username:        git_user_read
...

 3、关闭SELinux

vi /etc/selinux/config
将SELINUX=enforcing改为SELINUX=disabled   # 重启生效

4、创建共享目录

[root@web ~]# mkdir /home/git_root/
[root@web ~]# chmod -R 777 /home/git_root

5、配置Samba

[root@web ~]# vim /etc/samba/smb.conf
[git_dir]
        path = /home/git_root/   # git 根目录
        comment = this is git root directory
        valid users = git_user_write git_user_read   # 可读用户
        write list = git_user_write     # 可写用户

其它配置默认即可,我们只需在文件的最后加上上述代码块即可。然后开启Samba服务:

[root@web ~]# systemctl start smb
[root@web ~]# systemctl start nmb

6、验证Samba配置

这里最好把防火墙关闭了,要不然有可能会出问题。

[root@web ~]# systemctl stop firewalld

验证主机:

本机  Windows 7  使用git_user_read用户登陆   

虚拟主机 Centos 7 192.168.10.129  使用git_user_write用户登陆

由上面简单的动画我们可以看出git_user_read用户只有读取的权限,git_user_write用户有写入的权限。说明我们Samba的配置没有问题。下面我们开始真正进入正题

7、初始化git仓库

登陆我们的git服务器Centos 7 192.168.10.10,在/home/git_root/下创建我们的git仓库,这里我们创建了一个damo_repo。

[root@web git_root]# mkdir damo_repo
[root@web git_root]# git init --bare damo_repo/
[root@web git_root]# chmod -R 777 damo_repo/

7.1clone远程仓库

这里我使用本机Windows 7 ,在我的I盘中新建了一个git_repo用于存放从git服务器拉取的数据,然后在”控制面板--凭据管理器“中添加访问凭据。

这里我添加的是git_user_write用户,因为它有写入权限。

$ git clone //192.168.10.10/git_dir/damo_repo

clone成功后我们会看到如下:

我们在仓库中随便创建个test.html文件,如下操作:

test.html文件简单写个<h1>This is test</h1>
$ git add .
$ git commit -m 'test'
$ git push -u origin master

7.2使用192.168.10.129客户端验证。

由于192.168.10.129是Centos 7,我们的git服务器时基于Samba做的。所以这里需要在192.168.10.129上挂载192.168.10.10服务器上的git仓库。

如下操作:

[root@web home]# mount -t cifs -o username=git_user_read,password=123 //192.168.10.10/git_dir/ /mnt/
[root@web home]# mkdir git_repo  # 在home目录下创建git_repo用于存储git项目
[root@web home]# cd git_repo/
[root@web git_repo]# git clone file:///mnt/damo_repo/  # 获取git仓库中的项目

然后我们会看到如下界面;

下面我们创建一个文件尝试推送查看是否可以

[root@web damo_repo]# vim abc.sh
echo 'Hello World'
[root@web damo_repo]# git add .
[root@web damo_repo]# git commit -m 'abc'
[root@web damo_repo]# git push -u origin master
# 推送失败
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To file:///mnt/damo_repo/
 ! [remote rejected] master -> master (unpacker error)
error: 无法推送一些引用到 'file:///mnt/damo_repo/'

失败的原因是Samba权限的问题。git_user_read用户只有读取的权限,没有写入的权限。

小结:

  • 使用的是本地协议(Samba)。
  • git仓库的目录权限和Samba权限配合使用对用户权限进行管理。
  • 获取git服务器仓库:

    如果Git服务器是本机,使用git clone file:///仓库地址。

    如果Git服务器不是本机,本机是Windows,在控制面板中的凭证管理器中添加git服务器地址,用户名和密码。然后使用git clone //192.168.10.10/仓库。

    如果Git服务器不是本机,本机是linux,需要使用mount命令将git服务器仓库关在到本机,然后使用git clone file:///本地挂载位置  。


 

使用git协议搭建git服务器

未完待续。。。。。。。。。。。。。。

 

おすすめ

転載: www.cnblogs.com/caesar-id/p/11241219.html