平时自己喜欢写点代码,在家里、办公室、手著作权归作者所有,禁止商业用途转载。【转载请注明来源】机上同步代码是一件烦人的事,怎么解决呢?【版权所有,侵权必究】【版权所有,侵权必究】自然是想要一个git中心化服务。虽然gi【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】t本身是去中心化的,但是想要让多个节点之【转载请注明来源】转载请注明出处:www.tangshuang.net间保持同步,必须有一个在公网同时可访的节转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net点作为桥梁,只要在任何环境、设备下,这台未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。机器都可以被访问,通过git获取和推送代转载请注明出处:www.tangshuang.net原创内容,盗版必究。码,就算实现了我的目标。于是开始折腾。
【原创内容,转载请注明出处】【未经授权禁止转载】搭建git服务
搭建一台git服务非常方便,去腾讯云购买【转载请注明来源】【版权所有,侵权必究】最便宜的云服务器。我喜欢ubuntu,所【本文首发于唐霜的博客】【转载请注明来源】以下面都是在ubuntu的服务器上作业。【转载请注明来源】原创内容,盗版必究。git是点对点的服务,所以,搭建一台gi本文作者:唐霜,转载请注明出处。【转载请注明来源】t服务超级简单,你都不需要做任何操作,系本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net统自带了git。如果系统不自带git,用【本文首发于唐霜的博客】原创内容,盗版必究。内置的安装命令安装它就可以了。
【作者:唐霜】【原创内容,转载请注明出处】当你的服务器安装好git之后,就具备了g本文作者:唐霜,转载请注明出处。【转载请注明来源】it服务。由于git是去中心化的,每一个转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net安装了git的电脑,都可以为其他节点提供【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】服务(其实并没有提供服务,而只是提供了数本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net据传输的方式,怎么传输,还是要靠协议层)【本文受版权保护】【访问 www.tangshuang.net 获取更多精彩内容】。它可以依托ssh, http(s)协议未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net来传输数据。默认,ssh是最便捷的git【转载请注明来源】本文版权归作者所有,未经授权不得转载。传输协议。基于ssh,你在clone的时未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net候,甚至不需要在仓库地址中写协议段。
本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】【本文受版权保护】在服务器上一个比较好记的路径下创建一个空本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net目录,在该目录下执行:
著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】【关注微信公众号:wwwtangshua【本文受版权保护】【转载请注明来源】ngnet】【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】ang.netgit init --bare
其中—bare参数表示,这个目录要作为裸【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。库,也就是纯粹作为存储代码的地方,而非进【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。行代码撰写的地方。而普通执行git in转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netit会在当前目录下创建一个.git目录,未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net在*nix系统中是个隐藏目录。它里面的内著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】容个执行git init —bare产生【本文受版权保护】本文版权归作者所有,未经授权不得转载。的内容结构一模一样。
【关注微信公众号:wwwtangshua本文作者:唐霜,转载请注明出处。【本文受版权保护】ngnet】【版权所有】唐霜 www.tangshu本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】ang.net本文版权归作者所有,未经授权不得转载。也就是说,无论是用—bare创建的裸库,【原创内容,转载请注明出处】【原创内容,转载请注明出处】还是直接生成的.git目录,都可以被别人【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net克隆和推送。
【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.netet 获取更多精彩内容】【本文首发于唐霜的博客】未经授权,禁止复制转载。当我们在服务器上创建一个仓库之后,其他节【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】点就可以通过ssh或http(s)连接和【未经授权禁止转载】【原创内容,转载请注明出处】拉取、推送了:
【原创内容,转载请注明出处】【访问 www.tangshuang.n【转载请注明来源】【作者:唐霜】et 获取更多精彩内容】原创内容,盗版必究。git clone user1@127.0.0.1:/home/user1/gittest
上面的连接方式基于ssh,user1是s【未经授权禁止转载】【本文受版权保护】sh登陆用户,@后面是主机地址,:后面是【转载请注明来源】著作权归作者所有,禁止商业用途转载。git仓库目录的路径。执行上面命令后,会【版权所有,侵权必究】【未经授权禁止转载】要求你输入主机上user1的密码,这样就【未经授权禁止转载】原创内容,盗版必究。可以把远程的仓库克隆到本地当前目录下。
【作者:唐霜】【原创不易,请尊重版权】【本文首发于唐霜的博客】启用http服务
前面已经启用了ssh服务,这样虽然我们可【本文受版权保护】著作权归作者所有,禁止商业用途转载。以连接到服务器上获取代码,但是有一个问题本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。,如果在一些屏蔽了22端口的网络环境下怎【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。么办呢?这种事情常有发生,因为很多公司内未经授权,禁止复制转载。【未经授权禁止转载】部为了安全起见,都会封闭大部分端口,只保原创内容,盗版必究。【版权所有,侵权必究】留几个端口,比如常用的80、443、80转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。80。如果是这样,那上面那种直接使用gi本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】t内置连接方式连接的办法就不行了,因为g【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.netit内置的连接办法是ssh的,也就是需要【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。支持22端口(当然,你可以在本机的ssh【作者:唐霜】未经授权,禁止复制转载。 config中进行配置,但是,你总不可转载请注明出处:www.tangshuang.net【转载请注明来源】能在本地和服务器上都为了git而修改ss本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.neth的配置吧。而且,即使这样,你也得让你的【未经授权禁止转载】未经授权,禁止复制转载。网关支持你修改的端口。
【关注微信公众号:wwwtangshua原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。ngnet】【原创不易,请尊重版权】【访问 www.tangshuang.n转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netet 获取更多精彩内容】既然这样,我们就要像github一样,实【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。现一种基于http(s)的服务,这样,在【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】这样的公司内网,就可以通过http(s)未经授权,禁止复制转载。未经授权,禁止复制转载。来拉取和推送代码了。
【版权所有】唐霜 www.tangshu【作者:唐霜】【转载请注明来源】ang.net本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshua【作者:唐霜】【本文首发于唐霜的博客】ng.netgit支持的http协议,是称为“亚协议本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net”的http协议方式。这可以在git的官【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。网查到。简单说,就是,你可以把你的仓库放【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】在一个http请求目录下,然后直接用gi【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】t clone对应的url路径即可。这样本文版权归作者所有,未经授权不得转载。【转载请注明来源】,git会根据你提供的路径的协议自己选择未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net使用什么协议来传输文件。
【本文受版权保护】【转载请注明来源】原创内容,盗版必究。搭建http服务这里就不赘述了,对于ub【版权所有,侵权必究】【转载请注明来源】untu服务器而言,直接安装apache著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。2即可。
【版权所有】唐霜 www.tangshu【版权所有】唐霜 www.tangshuang.net【作者:唐霜】ang.net【访问 www.tangshuang.n【原创不易,请尊重版权】未经授权,禁止复制转载。et 获取更多精彩内容】但是就如上一段讲到的,你只能通过http本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】 clone这个仓库,只能拉取代码,推送【转载请注明来源】著作权归作者所有,禁止商业用途转载。代码是无效的。怎么样才能通过http推送【未经授权禁止转载】【原创不易,请尊重版权】代码上去呢?
【版权所有】唐霜 www.tangshu【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】ang.net【原创不易,请尊重版权】git提供了一个叫git-http-ba【转载请注明来源】本文版权归作者所有,未经授权不得转载。ckend的程序,它可以帮助你实现推送。原创内容,盗版必究。【转载请注明来源】简单的说,它跟php一样,接收你git 【转载请注明来源】转载请注明出处:www.tangshuang.netpush的内容,然后将这些内容写入到服务【作者:唐霜】【版权所有,侵权必究】器的文件系统。总之,利用这个程序就可以实本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。现git push了。但是,到底要怎么实【原创内容,转载请注明出处】【原创内容,转载请注明出处】现呢?
【原创不易,请尊重版权】转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。ng.net著作权归作者所有,禁止商业用途转载。其实,你可以这样理解。它就是一段特殊的程【转载请注明来源】未经授权,禁止复制转载。序,就像你要让apache支持php一样【本文受版权保护】未经授权,禁止复制转载。,要给apache挂载一个插件(姑且这么【本文首发于唐霜的博客】未经授权,禁止复制转载。讲吧),这样,当一个请求到达时,就会把这本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。个请求转发给这个程序去处理。
转载请注明出处:www.tangshua未经授权,禁止复制转载。【本文首发于唐霜的博客】ng.net【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。你需要在apche2的配置文件中增加这个本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】逻辑。
【转载请注明来源】【未经授权禁止转载】<VirtualHost *:80>
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GIT_PROJECT_ROOT /home/git/repos
ScriptAlias / /usr/lib/git-core/git-http-backend/
DocumentRoot /home/git/repos
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/ - [E=AUTHREQUIRED]
</VirtualHost>
红色部分是关键,GIT_PROJECT_ROOT表示要使用git backend的目录。【未经授权禁止转载】【本文受版权保护】不过,我这个配置完全忽略了和其他服务共存著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。的情况,直接采用了/作为ScriptAl原创内容,盗版必究。转载请注明出处:www.tangshuang.netias的路径。你可以根据自己的实际情况进【未经授权禁止转载】本文作者:唐霜,转载请注明出处。行调整。
原创内容,盗版必究。未经授权,禁止复制转载。转载请注明出处:www.tangshua【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】ng.net【原创内容,转载请注明出处】简单总结,就是在apache的配置中增加【本文受版权保护】本文版权归作者所有,未经授权不得转载。ScriptAlias,通过一个类似al转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。ias的规则,把一个特定uri下的访问交【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】给git http backen这个程序本文版权归作者所有,未经授权不得转载。【转载请注明来源】去处理,这样,在接收到这个uri的git本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net push请求时,就可以交给这个程序去完【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。成写入仓库的逻辑。
【作者:唐霜】转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】ng.net【原创内容,转载请注明出处】鉴权
接下来要解决的问题是,要阻止别人提交代码【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。到你的仓库。你需要设置密码,就像gith原创内容,盗版必究。【本文首发于唐霜的博客】ub一样。那要怎么弄呢?
转载请注明出处:www.tangshua原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】ng.net【版权所有,侵权必究】其实很简单。http的鉴权有两种方式,一原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】种是自建权限系统,另一种,是直接利用ht【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】passwd鉴权。无论哪种,都是对每一个【原创内容,转载请注明出处】【本文受版权保护】请求进行鉴权,在请求交给应用程序去处理之【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】前先拦截下来,鉴权通过再继续这个流程,否著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】则直接拒绝请求。
转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。ng.net【作者:唐霜】相对来说,直接利用htpasswd鉴权最【本文受版权保护】【原创不易,请尊重版权】简单。这种鉴权方式传统,到有效。说它传统【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】,是因为只有老式的网站通过这种方式使网站【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。变为私有网站,进入网站会弹出一个对话框,本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net必须输入正确的用户名和密码才能进入。
【关注微信公众号:wwwtangshua【本文首发于唐霜的博客】【原创不易,请尊重版权】ngnet】本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】原创内容,盗版必究。这种鉴权方法对任何http(s)网站都是【未经授权禁止转载】【原创内容,转载请注明出处】通用的,这里说下怎么实现。
【版权所有,侵权必究】【转载请注明来源】先在/home/git目录下执行:
未经授权,禁止复制转载。【访问 www.tangshuang.n【本文受版权保护】本文版权归作者所有,未经授权不得转载。et 获取更多精彩内容】【转载请注明来源】htpasswd -c http.passwd [username]
执行之后,会让你输入密码。这样,就会创建原创内容,盗版必究。【未经授权禁止转载】一个名叫http.passwd的文件,并【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。且里面包含了你刚才创建和输入的用户和密码【版权所有】唐霜 www.tangshuang.net【本文受版权保护】信息。
原创内容,盗版必究。【原创不易,请尊重版权】转载请注明出处:www.tangshua【本文受版权保护】【访问 www.tangshuang.net 获取更多精彩内容】ng.net接下来,要在apache配置文件中配置:
【原创不易,请尊重版权】【本文受版权保护】著作权归作者所有,禁止商业用途转载。<VirtualHost *:80>
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GIT_PROJECT_ROOT /home/git/repos
ScriptAlias / /usr/lib/git-core/git-http-backend/
DocumentRoot /home/git/repos
<Location />
AuthType Basic
AuthName "Git Acess"
AuthUserFile /home/git/http.passwd
Require valid-user
Allow from all
</Location>
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/ - [E=AUTHREQUIRED]
</VirtualHost>
说到底,这个配置跟git一点关系都没有,【转载请注明来源】原创内容,盗版必究。它仅不过是apache自带的一种认证方式本文作者:唐霜,转载请注明出处。【作者:唐霜】。
本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。【版权所有】唐霜 www.tangshu【原创不易,请尊重版权】未经授权,禁止复制转载。ang.net结语
本文解释了利用自己的服务器,给自己提供一【本文首发于唐霜的博客】【原创不易,请尊重版权】个在线的git服务的的方法,利用git自【未经授权禁止转载】【原创内容,转载请注明出处】带的功能,提供一个git节点,并通过配置【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。apache实现可通过http传输的方式转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】,最后,利用apache自己的功能,实现【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。http鉴权,这样就可以给自己提供一个在【转载请注明来源】【版权所有,侵权必究】线的git仓库,走到哪里都可以方便地在不本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。同设备之间同步代码了。
【版权所有】唐霜 www.tangshu【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.netang.net【本文受版权保护】2018-11-24 16828 git


