首页 > 代码库 > 在老DELL电脑上制作基于SSH的小型本地Git服务器
在老DELL电脑上制作基于SSH的小型本地Git服务器
硬件情况:
DELL OPTIPLEX 745
Core 2 64位
1G 内存
160G 硬盘
Ubuntu 12.04.5 LTS 32位(因为内存小于2G),字符界面(不运行X Windows,为了省内存)
步骤:
1、创建一个用户git,创建主目录,适当修改一下权限;
2、参考http://git-scm.com/book/zh/ 4.2节的步骤,在主目录下执行:
$ git clone --bare https://github.com/Ricky-Gong/*.git (总共弄下来5个)
尝试了一下,只要有ssh权限,就可以在手提电脑上与主机传输文件,例如:
$ git clone 【user】@【git.example.com】:【/opt/git/my_project.git】
用户名 主机域名或地址 Git仓的路径
3、参考:
http://git-scm.com/book/zh/ 4.3节对SSH密钥的描述;
https://help.github.com/articles/generating-ssh-keys 中生成ssh key的步骤;
https://help.github.com/articles/changing-a-remote-s-url 中从https转到ssh的做法(一开始clone是用https的);
大部分按照上述来做,只是有一处要修改:
在第二个网页的步骤中,在Step 2下第一个命令处:
ssh-keygen -t rsa -C "your_email@example.com"
它后面要你输入passphrase,这一步网页上强烈建议输入,但是由于我们的特殊环境,因此直接回车,否则之后每次上传都要输入这个passphrase,SSH相比于https的优势荡然无存。
其他的照做。
==============================================================================
原因:
最根本的原因是我们工作在字符界面下。
理论上说,这个passphrase会被一个叫ssh-agent的程序保存下来(只要安装了,会默认开机自启动),然后运行过一次之后,以后每一次通过SSH与Github传输数据,它就会自动帮我们输入passphrase。但是,通过查看man page得知,这个程序的运行是基于X Windows的;也就是说,在字符界面下,这个程序是无法工作的(所以上述的“开机自启动”,应该改为“启动X Windows后自动启动”)。这个程序不工作,我们输入的passphrase就无法保存,这就导致了我之前有遇到过的问题:每次上传都要输入这个passphrase。如果此处我们不输入passphrase,就可以自动上传了。
假如不小心输入了,也没有关系,不需要重新生成一份,只需要在密钥生成之后,执行这个页面https://help.github.com/articles/working-with-ssh-key-passphrases 下的命令,修改passphrase就好了。
==============================================================================
4、根据需要,写一个上传脚本,并设置crontab,固定每一周的某个时间,与Github同步一次,并保存日志。完事~
附上一个检测主机是否能访问Internet的shell脚本:
http://www.2cto.com/kf/201309/243768.html
在我的脚本程序中,有使用这里面的代码。
附上源代码,根据两者所在的实际目录,修改upload脚本中的地址参数;并且要新建一个log文件夹,用来存放日志,同样要修改upload中关于它的地址参数。
1 #! /bin/bash 2 3 timeout=5 4 target=www.baidu.com 5 git_dir=/home/git 6 log_dir=/home/git/maintain/log 7 log_name=$(date ‘+%d_%m_%Y‘).log 8 mail_text=/home/git/maintain/mail.txt 9 10 11 upload()12 {13 cd $git_dir14 for each_git in $(ls -d *.git)15 do16 cd "## /home/git/$each_git"17 echo "/home/git/$each_git:" >> $log_dir/$log_name 18 # check whether there‘s a modification19 # if so, sync with github20 21 git push origin master >> $log_dir/$log_name 2>&122 echo "errno: $?" >> $log_dir/$log_name 23 done24 }25 26 sendmail()27 {28 # Ricky29 mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@qq.com < $mail_text30 # JK Chen31 mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@qq.com < $mail_text32 # D Qiao33 mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@qq.com < $mail_text34 # XQ Qian35 mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@qq.com < $mail_text36 # RS Liang37 mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@qq.com < $mail_text38 # K Huang39 #mail -s "Local Git weekly push on $(date ‘+%B %d, %Y‘)" *@mail.sysu.edu.cn < $mail_text40 }41 42 printHelp()43 {44 echo "This script accepts no, or only one argument, which is \"-nomail\"."45 echo "It will disable the email sending."46 }47 48 # trigger49 mail=150 51 52 53 #================================================================================================54 55 56 57 # Dealing with arguments58 if [ "$#" -gt 1 ]; then59 echo "$0: Too much argument"60 exit 161 fi62 63 if [ "$1" = ‘-nomail‘ ]; then64 mail=065 elif [ "$1" = ‘--help‘ ]; then66 printHelp67 exit 068 elif [ -n "$1" ]; then69 echo "$0: Invalid argument"70 exit 171 fi72 73 # Body74 touch $log_dir/$log_name75 echo "=================================================================" >> $log_dir/$log_name76 echo "update.sh: start process at $(date ‘+%T on %B %d, %Y‘)" >> $log_dir/$log_name77 echo "user: $(whoami)" >> $log_dir/$log_name78 echo "pwd: $(pwd)" >> $log_dir/$log_name79 echo "" >> $log_dir/$log_name80 echo "" >> $log_dir/$log_name81 82 83 ret_code=$(curl -I -s --connect-timeout $timeout $target -w %{http_code} | tail -n1)84 if [ "x$ret_code" = "x200" ]; then85 upload86 # mail everyone for notification.87 if [ $mail -eq 1 ]; then88 sendmail89 fi90 echo "=================================================================" >> $log_dir/$log_name91 exit 092 else93 echo "Repositories won‘t uploaded to the github: Internet unavailable" >> $log_dir/$log_name94 # no internet access, can‘t send e-mail95 echo "=================================================================" >> $log_dir/$log_name96 exit 197 fi
在老DELL电脑上制作基于SSH的小型本地Git服务器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。