在老DELL電腦上製作基於SSH的小型本地Git伺服器

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

硬體情況:DELL OPTIPLEX 745Core 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 "[email protected]"
它後面要你輸入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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.