一、登錄公私鑰和git公私鑰
1、服務器使用公鑰,本地使用私鑰;
2、ssh公鑰登錄服務器,與git公鑰認證是同一套系統,不同的linux用戶;
3、例如以root用戶登入服務器, cd ~/.ssh vi authorized_keys ,用於存放登錄公鑰,形如
ssh-rsa AAA************* companyPC
ssh-rsa AAA************* myMacBook
4、切換到git用戶,su git,同樣的 cd ~/.ssh vi authorized_keys,用於存放git驗證的公鑰,形如
git用戶的ssh授權文件位置 /home/git/.ssh/authorized_keys
ssh-rsa AAA************* companyPC-git
ssh-rsa AAA************* myMacBook-git
5、公私鑰生成命令(Linux或MAC系統)。
ssh-keygen -t rsa -P '' 這里的-P后面填的是密碼,可為空,一般SSH登錄的建議設密碼,GIT認證用的可以留空。
這個命令則會在提示的指定目錄生成兩個文件 id_rsa 私鑰文件 id_rsa.pub 公鑰文件
6、打開id_rsa.pub文件,復制內容到第3或4的服務器文件中。
本地登錄/GIT檢出時,選擇使用私鑰的方式,使用剛才生成的id_rsa文件。
7、使用tortoiseGIT時,使用的私鑰是ppk格式,需要下載puttygen,生成ppk格式類型的公私鑰對,或轉換成ppk格式的公私鑰對。
二、搭建 git 服務器
1、安裝git yum install git
2、創建一個git用戶,用來運行git服務 adduser git
3、創建證書登錄:
收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件,把所有公鑰導入到 /home/git/.ssh/authorized_keys 文件里,一行一個。
4、在服務器的 /git/myProj 文件夾中創建新的裸倉庫 git init --bare ,並把owner改為git chown -R git /git/myProj
5、由於git默認拒絕了push操作,需要進行設置,修改 /git/myProj/config 文件后面添加如下代碼:
[receive]
denyCurrentBranch = ignore
6、禁用shell登錄:
出於安全考慮,第二步創建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:
git:x:1001:1001:git user:/git:/bin/bash
改為:
git:x:1001:1001:git user:/git:/bin/git-shell
這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。
三、MAC版sourceTree使用私鑰登錄倉庫
1、MAC版sourceTree沒有單獨的項目設置公鑰,使用的是系統里的配置登錄;
2、使用上面的方法生成好公私鑰文件,本地使用的是私鑰文件;
3、假設私鑰文件的存放路徑為 /Users/batsing/git-key/id_rsa ;
4、MAC電腦打開命令行工具,進入本人目錄 cd ~ ,ls -a 查看是否存在 .ssh文件夾,如果沒有則創建,如果有則進入.ssh文件夾;
5、現在所在的目錄為 ~/.ssh,在本目錄用VI編輯器新建config文件, vi config ,按i進入編輯狀態,輸入以下文本;
Host 127.0.0.1 Port 12200 User git IdentityFile /Users/batsing/git-key/id_rsa
Host為git服務器的IP地址,Port為端口,User為登錄用戶,IdentityFile后面填私鑰文件的路徑;
6、保存並退出VI編輯器,這樣sourceTree要用的git私鑰就配置好了。
7、檢查config文件和私鑰文件,權限需要為600,chmod 600 id_rsa 否則也不能成功。若還有問題,使用控制台 git clone 項目 來可以查看具體問題原因
8、現在sourceTree就可以拉取、推送等操作了。重啟電腦配置不會丟失。
9、命令行克隆項目到本地當前文件夾 git clone 項目網址 ./
四、git 撤銷,放棄本地修改
1、未使用 git add 緩存代碼時
可以使用 git checkout -- filepathname (比如: git checkout -- readme.md ,不要忘記中間的 “--” ,不寫就成了檢出分支了!!)。放棄所有的文件修改可以使用 git checkout . 命令。
此命令用來放棄掉所有還沒有加入到緩存區(就是 git add 命令)的修改:內容修改與整個文件刪除。但是此命令不會刪除掉剛新建的文件。因為剛新建的文件還沒已有加入到 git 的管理系統中。所以對於git是未知的。自己手動刪除就好了。
2、已經使用了 git add 緩存了代碼
可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)來放棄指定文件的緩存,放棄所以的緩存可以使用 git reset HEAD . 命令。
此命令用來清除 git 對於文件修改的緩存。相當於撤銷 git add 命令所在的工作。在使用本命令后,本地的修改並不會消失,而是回到了如(一)所示的狀態。繼續用(一)中的操作,就可以放棄本地的修改。
創建一個git
用戶,用來運行git
服務: