您好,登錄后才能下訂單哦!
Git遠程版本庫
===============================================================================
概述:
===============================================================================
1.分布式版本控制系統
★基于的是網絡協議
http,https,ssh,git
2.克隆操作
★git clone
★原始版本庫存儲在 refs/heads/
3.git 服務器
★協議
本地協議(local)、HTTP/HTTPS協議、SSH協議、Git協議
☉本地協議
URL:
/path/to/repo.git
file:///path/to/repo.git
☉Git協議:由git-daemon程序提供,監聽在tcp的9418端口;僅支持“讀”操作,無任何認證功能(支持開放式的開源項目);
URL:
git://host/path/to/repo.git
git://host/~user/path/to/repo.git
☉SSH協議
URL:
ssh://[USER@]host[:port]/path/to/repo.git
ssh://[USER@]host[:port]/~USERNAME/path/to/repo.git
URL2:
[USER@]hostpath/torepo.git
☉HTTP/HTTPS協議
1.6.5-:啞 http 協議
1.6.6+:智能 http 協議 (讀/寫/認證)
URL:
http://host/path/to/repo.git
演示1:本地協議
[root@node1?~]#?git?clone?file:///root/taotao/?/root/huihui Cloning?into?'/root/huihui'... remote:?Enumerating?objects:?32,?done. remote:?Counting?objects:?100%?(32/32),?done. remote:?Compressing?objects:?100%?(23/23),?done. remote:?Total?32?(delta?8),?reused?0?(delta?0) Receiving?objects:?100%?(32/32),?done. Resolving?deltas:?100%?(8/8),?done. [root@node1?~]#?cd?/root/huihui/ [root@node1?huihui]#?ls first.sh??INSTALL??my.txt??readmin??second.sh??subdir [root@node1?huihui]#?cd?.git/ [root@node1?.git]#?ls branches??config??description??HEAD??hooks??index??info??logs??objects??packed-refs??refs [root@node1?.git]#?tree?refs/ refs/ ├──?heads │???└──?master??#實際上只clone的master分支 ├──?remotes???#遠程跟蹤分支 │???└──?origin │???????└──?HEAD?#指向master分支 └──?tags 4?directories,?2?files [root@node1?~]#?tree?/root/taotao/.git/refs/ /root/taotao/.git/refs/ ├──?heads │???├──?dev │???├──?fotfix │???└──?master └──?tags 2?directories,?3?files
1.分布式版本控制系統
★遠程版本庫
定義在配置文件中的一個實體;
[remote "NAME"]
☉由兩部分組成:
第一部分:URL
第二部分:refspec,定義一個版本庫與其他版本庫的名稱空間的映射關系;
☉語法格式:
+source:destination(本地分支和映射的目標分支)
? ? ? ?refs/heads/NAME:本地分支
? ? ? ?refs/remotes/NAME:遠程跟蹤分支
eg:
? ? ?[remote "publish"]
? ? ?url=http://HOST/pub/repo_name.git
? ? ?push= +refs/heads/*:refs/remotes/origin/*
顯示樣子:
? ? ?remote.publish.url
? ? ?remote.publish.push
?★git remote? 命令可管理遠程倉庫
git協議演示:
在node2服務器上安裝git服務器,并啟動服務
[root@node2~]#?yum?install?git-daemon [root@node1?huihui]#?rpm?-ql?git-daemon /usr/lib/systemd/system/git.socket????#為一個瞬時守護進程,可以直接啟動 /usr/lib/systemd/system/git@.service /usr/libexec/git-core/git-daemon /usr/share/doc/git-daemon-1.8.3.1 /usr/share/doc/git-daemon-1.8.3.1/git-credential-cache--daemon.html /usr/share/doc/git-daemon-1.8.3.1/git-credential-cache--daemon.txt /usr/share/doc/git-daemon-1.8.3.1/git-daemon.html /usr/share/doc/git-daemon-1.8.3.1/git-daemon.txt /usr/share/man/man1/git-credential-cache--daemon.1.gz /usr/share/man/man1/git-daemon.1.gz /var/lib/git???#git倉庫的存放位置,相當于根目錄 [root@node2?~]#?cat?/usr/lib/systemd/system/git@.service [Unit] Description=Git?Repositories?Server?Daemon Documentation=man:git-daemon(1) [Service] User=nobody?????????????????????????????????#?修改?--base-path?后的路徑可以改變git倉庫的根目錄 ExecStart=-/usr/libexec/git-core/git-daemon?--base-path=/var/lib/git?--export-all?--user-path=public_git?--syslog?--inetd?--verbose StandardInput=socket #啟動服務,并查看tcp的端口9418 [root@node2?~]#?systemctl?start?git.socket [root@node2?~]#?ss?-tnl?|grep?9418 LISTEN?????0??????128?????????:::9418????????????????????:::*
2. 在nod2遠程服務器上的git根目錄下創建一個裸倉庫,無需工作目錄
[root@node2?~]#?cd?/var/lib/git/ [root@node2?git]#?git?init?--bare?myproject.git 初始化空的?Git?版本庫于?/var/lib/git/myproject.git/ [root@node2?git]#?ls?myproject.git/ branches??config??description??HEAD??hooks??info??objects??refs
3. 在node1節點克隆node2節點的遠程倉庫
[root@node1?~]#?git?clone?git://192.168.0.102/myproject.git Cloning?into?'myproject'... warning:?You?appear?to?have?cloned?an?empty?repository. [root@node1?myproject]#?ls?-a .??..??.git [root@node1?myproject]#?git?config?-l user.name=watao user.email=wangzhangtao@pachiratech.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=git://192.168.0.108/myproject.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master
http協議演示:
1.安裝httpd,確保有alias,env和cgi模塊
[root@node2~]#?yum?install?httpd #?確保有如下3個模塊 [root@node2?~]#?httpd?-M?|grep?-Ei?"\<(alias|cgi|env)" ?alias_module?(shared) ?env_module?(shared) ?cgi_module?(shared)
2.創建裸倉庫,并修改屬組和屬主為apache用戶
[root@node2?~]#?mkdir?/var/www/git [root@node2?~]#?cd?/var/www/git/ [root@node2?git]#?ls [root@node2?git]#?git?init?--bare?testproject.git 初始化空的?Git?版本庫于?/var/www/git/testproject.git/ [root@node2?git]#?chown?-R?apache.apache?/var/www/git/ [root@node2?git]#?ll?/var/www/git/ 總用量?4 drwxr-xr-x?7?apache?apache?4096?11月??5?22:46?testproject.git
3.自定義虛擬主機
[root@node2?git]#?vim?/etc/httpd/conf/httpd.conf 注釋掉?DocumentRoot?"/var/www/html" [root@node2?git]#?vim?/etc/httpd/conf.d/git.conf ?<VirtualHost?*:80> ?????????ServerName?git.taotao.com ?????????SetEnv?GIT_PROJECT_ROOT?/var/www/git??#指明git根目錄位置 ?????????SetEnv?GIT_HTTP_EXPORT_ALL?#基于http協議導出所有功能 ?????????ScriptAlias?/git/?/usr/libexec/git-core/git-http-backend/??#定義別名的映射路徑 ?????????<Directory?"/usr/libexec/git-core/"> ?????????????????Options?ExecCGI?Indexes ?????????????????Require?all?granted ?????????</Directory> ?</VirtualHost> ? [root@node2?git]#?httpd?-t Syntax?OK
4.啟動httpd服務,并在node1節點克隆testproject.git倉庫
[root@node2?git]#?systemctl?start?httpd [root@node2?git]#?ss?-tnl?|grep?80 LISTEN?????0??????128?????????:::80??????????????????????:::*? remote?helper?是?git?執行?git?clone?http://..?所需要的一個模塊,而這個模塊坐落在?git-core?目錄里,并且這個模塊的文件名叫?git-remote-http [root@node1]#?cd?/usr/local/git/bin [root@node1?bin]#?ln?-s??/usr/libexec/git-core/git-remote-http?/usr/local/git/bin/git-remote-http [root@node1?bin]#?ln?-s??/usr/libexec/git-core/git-remote-https?/usr/local/git/bin/git-remote-https [root@node1?bin]#?ll total?67600 -rwxr-xr-x?126?root?root?15006529?Jul??3?22:26?git -rwxr-xr-x???2?root?root???162741?Jul??3?22:26?git-cvsserver -rwxr-xr-x???1?root?root???351673?Jul??3?22:26?gitk -rwxr-xr-x?126?root?root?15006529?Jul??3?22:26?git-receive-pack lrwxrwxrwx???1?root?root???????37?Nov??5?23:29?git-remote-http?->?/usr/libexec/git-core/git-remote-http lrwxrwxrwx???1?root?root???????38?Nov??5?23:29?git-remote-https?->?/usr/libexec/git-core/git-remote-https -rwxr-xr-x???2?root?root??8672864?Jul??3?22:26?git-shell -rwxr-xr-x?126?root?root?15006529?Jul??3?22:26?git-upload-archive -rwxr-xr-x?126?root?root?15006529?Jul??3?22:26?git-upload-pack [root@node1?~]#?git?clone?http://192.168.0.108/git/testproject.git Cloning?into?'testproject'... warning:?You?appear?to?have?cloned?an?empty?repository. [root@node1?~]#?cd?testproject/ [root@node1?testproject]#?ls?-a .??..??.git [root@node1?testproject]#?tree?.git/ .git/ ├──?branches ├──?config ├──?description ├──?HEAD ├──?hooks │???├──?applypatch-msg.sample │???├──?commit-msg.sample │???├──?fsmonitor-watchman.sample │???├──?post-update.sample │???├──?pre-applypatch.sample │???├──?pre-commit.sample │???├──?prepare-commit-msg.sample │???├──?pre-push.sample │???├──?pre-rebase.sample │???├──?pre-receive.sample │???└──?update.sample ├──?info │???└──?exclude ├──?objects │???├──?info │???└──?pack └──?refs ????├──?heads ????└──?tags 9?directories,?15?files [root@node1?testproject]#?git?config?-l user.name=watao user.email=wangzhangtao@pachiratech.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true remote.origin.url=http://192.168.0.108/git/testproject.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master
5.創建文件并上傳遠程版本庫,發現沒有權限
[root@node1?testproject]#?echo?"New?Line"?>?README [root@node1?testproject]#?cat?README New?Line [root@node1?testproject]#?git?add?README [root@node1?testproject]#?git?status On?branch?master No?commits?yet Changes?to?be?committed: ??(use?"git?rm?--cached?<file>..."?to?unstage) new?file:???README [root@node1?testproject]#?git?commit?-m?"v0.1" [master?(root-commit)?fb24458]?v0.1 ?1?file?changed,?1?insertion(+) ?create?mode?100644?README [root@node1?testproject]#? [root@node1?testproject]#? [root@node1?testproject]#?git?push?origin?master fatal:?unable?to?access?'http://192.168.0.108/git/testproject.git/':?The?requested?URL?returned?error:?403??#沒有權限
6.要想能夠做到允許用戶上傳操作,需要配置認證訪問并開放訪問權限
#在node2節點開通http.receivepack [root@node2?testproject.git]#?git?config?http.receivepack?true [root@node2?testproject.git]#?git?config?-l core.repositoryformatversion=0 core.filemode=true core.bare=true http.receivepack=true #在node1節點再次上傳成功 [root@node1?testproject]#?git?push?origin?master Enumerating?objects:?3,?done. Counting?objects:?100%?(3/3),?done. Writing?objects:?100%?(3/3),?216?bytes?|?72.00?KiB/s,?done. Total?3?(delta?0),?reused?0?(delta?0) To?http://192.168.0.108/git/testproject.git ?*?[new?branch]??????master?->?master #在node2的遠程版本庫查看已經有提交對象 [root@node2?testproject.git]#?ls branches??config??description??HEAD??hooks??info??objects??refs [root@node2?testproject.git]#?cd?objects/ [root@node2?objects]#?ls 6b??dc??fb??info??pack [root@node2?objects]#?tree . ├──?6b │???└──?f181e7944f75a6411a13d94762118dafbc2cff ├──?dc │???└──?a7b9ab7d0a8f78dd357082f43ddd06c36533ee ├──?fb │???└──?244584596a111b649cc0ee0e4e0a554be60c68 ├──?info └──?pack
7.開放用戶認證
[root@node2]#?cd?/etc/httpd/conf.d? [root@node2?conf.d]#?cat?git.conf? <VirtualHost?*:80> ????????ServerName?git.taotao.com SetEnv?GIT_PROJECT_ROOT?/var/www/git SetEnv?GIT_HTTP_EXPORT_ALL ScriptAlias?/git/?/usr/libexec/git-core/git-http-backend/ <Directory?"/usr/libexec/git-core/"> ????????Options?ExecCGI?Indexes Require?all?granted </Directory> <LocationMatch?"^/git/.*/git-receive-pack$"> ????????AuthType?Basic AuthName?"Private?Git?Repo" AuthUserFile?/etc/httpd/conf/.htpasswd Require?valid-user ????????</LocationMatch> </VirtualHost> [root@node2?conf.d]#?httpd?-t Syntax?OK [root@node2?~]#?systemctl?restart?httpd #node1節點刪除原來的目錄,重新克隆 [root@node1?~]#?rm?-fr?testproject/ [root@node1?~]#?git?clone?http://192.168.0.108/git/testproject.git Cloning?into?'testproject'... remote:?Counting?objects:?3,?done. remote:?Total?3?(delta?0),?reused?0?(delta?0) Unpacking?objects:?100%?(3/3),?done. [root@node1?~]#? [root@node1?~]#?cd?testproject/ [root@node1?testproject]#?ls README #顯示本地分支 [root@node1?testproject]#?git?show-branch? [master]?v0.1 #顯示遠程分支 [root@node1?testproject]#?git?show-branch?-r !?[origin/HEAD]?v0.1 ?!?[origin/master]?v0.1 -- ++?[origin/HEAD]?v0.1 #?新添加一行 [root@node1?testproject]#?echo?"second?line"?>>?README? [root@node1?testproject]#?cat?README New?Line second?line [root@node1?testproject]#?git?add?README [root@node1?testproject]#?git?commit?-m?"v0.2" [master?a9bc92e]?v0.2 ?1?file?changed,?1?insertion(+)
在遠程分支node2節點創建兩個用戶,并在node1本地上傳
[root@node2?~]#?htpasswd?-c?-m?/etc/httpd/conf/.htpasswd?tom New?password:? Re-type?new?password:? Adding?password?for?user?tom [root@node2?~]#?htpasswd?-m?/etc/httpd/conf/.htpasswd?jerry New?password:? Re-type?new?password:? Adding?password?for?user?jerry [root@node2?~]#?systemctl?reload?httpd #node1節點上傳需要輸入密碼 [root@node1?testproject]#?git?push?origin?master Enumerating?objects:?5,?done. Counting?objects:?100%?(5/5),?done. Writing?objects:?100%?(3/3),?254?bytes?|?42.00?KiB/s,?done. Total?3?(delta?0),?reused?0?(delta?0) Username?for?'http://192.168.0.108':?tom Password?for?'http://tom@192.168.0.108':? To?http://192.168.0.108/git/testproject.git ???fb24458..a9bc92e??master?->?master
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。