如题所述
æ¬æä»ç»å¦ä½å¨ mac æºå¨ä¸å建 Git æå¡å¨ï¼æ»ä½æè·¯æ¯ï¼ä½¿ç¨gitosisæ¥ç®åå建è¿ç¨ï¼å¨ç¨ä½æå¡å¨çæºå¨ä¸å建ä¸ä¸ªå为 git çè´¦æ·æ¥å建 git æå¡å¨ï¼å ¶ä»å®¢æ·ç«¯éè¿ ssh æºå¶è®¿é® git æå¡å¨ã
ä¸ï¼å建 git è´¦æ·
1ï¼å¨ç¨ä½æå¡å¨çæºå¨ä¸å建 git è´¦æ·ãæ们å¯ä»¥éè¿ System Preferences->accounts æ¥æ·»å ãå¨è¿éææ·»å ä¸ä¸ª git ç administrator è´¦æ·ï¼administrator ä¸æ¯å¿ é¡»çï¼å¨è¿éä» ä» ä¸ºäºæ¹ä¾¿ã
2ï¼è®¾ç½®è¿ç¨è®¿é®
logout å½åè´¦æ·ï¼ä½¿ç¨ git è´¦æ·ç»å½ï¼å¨ System Preferences->Sharing ä¸ï¼å¾é Remote Loginã
äºï¼ä¸è½½å®è£ gitosis
1ï¼Mac OSX Yosemite é»è®¤å·²ç»ä¸ºæ们å®è£ äº Git å Pythonï¼å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤æ¥çå ¶çæ¬ä¿¡æ¯ï¼
yourname:~ git$git--version
git version 2.3.2 (Apple Git-55)
yourname:~ git$python--version
Python 2.7.9
2ï¼éè¿å½ä»¤ git clone git@github.com:tv42/gitosis.git æ¥ä¸è½½ gitosis
yourname:~ git$ git clone git@github.com:tv42/gitosis.git
Cloning into gitosis
remote: Counting objects: 614, done.
remote: Compressing objects: 100% (183/183), done.
remote: Total 614 (delta 434), reused 594 (delta 422)
Receiving objects: 100% (614/614), 93.82 KiB | 45 KiB/s, done.
Resolving deltas: 100% (434/434), done.
3ï¼è¿å ¥ gitosis ç®å½ï¼ä½¿ç¨å½ä»¤ sudo python setup.py install æ¥æ§è¡ python èæ¬æ¥å®è£ gitosisã
yourname:~ git$ cd gitosis/yourname:gitosis git$ sudo python setup.py install
running install
running bdist_egg
running egg_info
creating gitosis.egg-info
â¦â¦
Using /Library/Python/2.6/site-packages/setuptools-0.6c9-py2.6.egg
Finished processing dependencies for gitosis==0.2
ä¸ï¼å¶ä½ ssh rsa å ¬é¥
1ï¼åå° client æºå¨ä¸ï¼å¶ä½ ssh å ¬é¥ãå¨è¿éæç使ç¨åä¸å°æºå¨ä¸çå¦ä¸ä¸ªè´¦æ·ä½ä¸º clientãå¦æä½ä¸º client çæºå¨ä¸ä½ä¸º server çæºå¨ä¸æ¯åä¸å°ï¼ä¹æ¯ç±»åçæµç¨ï¼å¶ä½å ¬é¥ï¼æ¾ç½®å°æå¡ç /tmp ç®å½ä¸ãåªä¸è¿å¨åä¸å°æºå¨ä¸ï¼æ们å¯ä»¥éè¿å¼å¯å¦ä¸ä¸ª terminalï¼ä½¿ç¨ su åæ¢å° local è´¦æ·å°±å¯ä»¥åæ¶æä½ä¸¤ä¸ªè´¦æ·ã
yourname:~ git$ su local_accountPassword:bash-3.2$ cd ~
bash-3.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/local_account/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:Your identification has been saved in /Users/local_account/.ssh/id_rsa.
Your public key has been saved in /Users/local_account/.ssh/id_rsa.pub.
bash-3.2$ cd .ssh
bash-3.2$ ls
id_rsa id_rsa.pub
bash-3.2$ cp id_rsa.pub /tmp/yourame.pub
å¨ä¸é¢çå½ä»¤éï¼é¦å éè¿ su åæ¢å° local è´¦æ·ï¼åªæå¨åä¸å°æºå¨ä¸æææï¼ï¼ç¶åè¿å ¥å° local è´¦æ·ç home ç®å½ï¼ä½¿ç¨ ssh-keygen -t rsa çæ id_rsa.pubï¼æåå°è¯¥æ件æ·è´æ¾ç½®å° /tmp/yourname.pubï¼è¿æ · git è´¦æ·å°±å¯ä»¥è®¿é® yourname.pubäºï¼å¨è¿éæ¹åæ¯ä¸ºäºä¾¿äºå¨ git ä¸è¾¨è¯å¤ä¸ª clientã
åï¼ä½¿ç¨ ssh å ¬é¥åå§å gitosis
1ï¼ä¸è®ºä½ æ¯ä»¥é£ç§æ¹å¼ï¼é®ä»¶ï¼usbççï¼æ·è´ yourname.pub è³æå¡å¨ç /tmp/yourname.pubãä¸é¢çæµç¨é½æ¯ä¸æ ·ï¼ç»å ¥æå¡å¨æºå¨ç git è´¦æ·ï¼è¿å ¥å åæå° gitosis ç®å½ï¼è¿è¡å¦ä¸æä½åå§å gitosisï¼åå§åå®æåï¼ä¼å¨ git ç home ä¸å建 repositories ç®å½ã
yourname:gitosis git$ sudo -H -u git gitosis-init < /tmp/yourname.pub
Initialized empty Git repository in /Users/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /Users/git/repositories/gitosis-admin.git/
å¨è¿éï¼ä¼å°è¯¥ client å½å认è¯åä¿¡ä»»çè´¦æ·ï¼å æ¤å¨ git ç home ç®å½ä¸ä¼æè®°å½ï¼æ件 authorized_keys çå å®¹ä¸ yourname.pub å·®ä¸å¤ã
yourname:~ git$ cd ~yourname:~ git$ cd .sshyourname:.ssh git$ ls
authorized_keys
æ们éè¦å° authorizd_keys ç¨åä¿®æ¹ï¼ç¨ææ¬ç¼è¾å¨æå¼å®ï¼å é¤éé¢ç"command="gitosis-serve yourname",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " è¿ä¸è¡ï¼
yourname:.ssh git$ open -e authorized_keys
ç¶åï¼æ们对 post-update èµäºå¯åæéï¼ä»¥ä¾¿ client 端å¯ä»¥æ交æ´æ¹ã
yourname:gitosis git$ sudo chmod 755 /Users/git/repositories//gitosis-admin.git/hooks/post-update
Password:
yourname:.ssh git$ cd ~
yourname:~ git$ cd repositories/
yourname:repositories git$ ls
gitosis-admin.git
yourname:repositories git$
å¨ä¸é¢çå½ä»¤ä¸å¯ä»¥çå°ï¼gitosis ä¹æ¯ä½ä¸ºä»åºçå½¢å¼ç»åºï¼æ们å¯ä»¥å¨å ¶ä»è´¦æ·ä¸ checkoutï¼ç¶å对 gitosis è¿è¡é 置管çççï¼èæ é使ç¨æå¡å¨ç git è´¦æ·è¿è¡ã
æåä¸æ¥ï¼ä¿®æ¹ git è´¦æ·ç PATH è·¯å¾ã
yourname:gitosis git$ touch ~/.bashrc
yourname:gitosis git$ echo PATH=/usr/local/bin:/usr/local/git/bin:\$PATH > .bashrc
yourname:gitosis git$ echo export PATH >> .bashrc
yourname:gitosis git$ cat .bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATHexport PATH
è³æ¤ï¼æå¡å¨çé ç½®å®æã
äºï¼client é ç½®
1ï¼åå° local è´¦æ·ï¼é¦å å¨ terminal è¾å ¥å¦ä¸å½ä»¤ä¿®æ¹ local ç git é ç½®ï¼
bash-3.2$ git config --global user.name "yourgitname"bash-3.2$ git config --global user.email "yourmail@yourcom.com"
2ï¼æµè¯æå¡å¨æ¯å¦è¿æ¥æ£ç¡®ï¼å° 10.1.4.211 æ¢æä½ æå¡çå称ææå¡å¨å°åå³å¯ã
yourname:~ local_account$ ssh git@10.1.4.211Last login: Mon Nov 7 13:11:38 2011 from 10.1.4.211
3ï¼å¨æ¬å° clone æå¡å¨ä»åºï¼ä¸é¢ä»¥ gitosis-admin.git 为ä¾ï¼
bash-3.2$ git clone git@10.1.4.211:repositories/gitosis-admin.git
Cloning into gitosis-adminremote: Counting objects: 5, done.remote: Compressing objects: 100% (5/5), done.remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
bash-3.2$ ls
Desktop InstallApp Music Sites
Documents Library Pictures gitosis-admin
Downloads Movies Public
bash-3.2$ git
å¨ä¸é¢çè¾åºä¸å¯ä»¥çå°ï¼æ们已ç»æå clone æå¡å¨ç gitosis-admin ä»åºè³æ¬å°äºã
4ï¼å¨æ¬å°ç®¡ç gitosis-admin:
è¿å
¥ gitosis-admin ç®å½ï¼æ们æ¥æ¥çä¸ä¸å
¶ç®å½ç»æï¼gitosis.conf æ件æ¯ä¸ä¸ªé
ç½®æ件ï¼éé¢å®ä¹åªäºç¨æ·å¯ä»¥è®¿é®åªäºä»åºï¼æ们å¯ä»¥ä¿®æ¹è¿ä¸ªé
ç½®ï¼ï½keydirï½ æ¯åæ¾ssh å
¬é¥çå°æ¹ã
bash-3.2$ cd gitosis-admin/
bash-3.2$ ls
gitosis.conf keydir
bash-3.2$ cd keydir/
bash-3.2$ ls
yourname.pub
æ们åªéè¦å°å ¶ä» client 产çç ssh å ¬é¥æ·»å å° keydir ç®å½ä¸ï¼å¹¶å¨ gitosis.conf æ件ä¸é ç½®è¿äºç¨æ·å¯ä»¥è®¿é®çä»åº(ç¨æ·åä¸æ¾ç½®å¨ keydir ä¸sh å ¬é¥åç¸åï¼è¿å°±æ¯å¨åé¢æ们è¦ä¿®æ¹ssh å ¬é¥åçåå )ï¼ç¶åå°æ¹å¨æ交è³æå¡å¨ï¼è¿æ ·å°±å¯ä»¥è®©å ¶ä»ç client 端访é®æå¡å¨ç代ç ä»åºäºã
5,ä»åºæé管ç
gitosis.confæ件æ¯ç¨æ¥è®¾ç½®ç¨æ·ãä»åºåæéçæ§å¶æ件ãkeydir ç®å½åæ¯ä¿åææå ·æ访é®æéç¨æ·å ¬é¥çå°æ¹â æ¯äººä¸ä¸ªãå¨ keydir éçæ件åï¼æ¯å¦ä¸é¢ç yourname.pubï¼åºè¯¥è·ä½ çä¸ä¸æ · â Gitosis ä¼èªå¨ä»ä½¿ç¨ gitosis-init èæ¬å¯¼å ¥çå ¬é¥å°¾é¨çæè¿°ä¸è·å该ååã
çä¸ä¸ gitosis.conf æ件çå 容ï¼å®åºè¯¥åªå å«ä¸ååå éç gitosis-admin ç¸å ³çä¿¡æ¯ï¼
$ cat gitosis.conf
[gitosis]
[group gitosis-admin]
members = scott
writable = gitosis-admin
å®æ¾ç¤ºç¨æ· yourname â åå§å Gitosis å ¬é¥çæ¥æè â æ¯å¯ä¸è½ç®¡ç gitosis-admin 项ç®ç人ã
ç°å¨æ们æ¥æ·»å ä¸ä¸ªæ°é¡¹ç®ã为æ¤æ们è¦å»ºç«ä¸ä¸ªå为 mobile çæ°æ®µè½ï¼å¨å ¶ä¸ç½åææºå¼åå¢éçå¼åè ï¼ä»¥åä»ä»¬æ¥æåæéç项ç®ãç±äº yourname æ¯ç³»ç»ä¸çå¯ä¸ç¨æ·ï¼æ们æä»è®¾ä¸ºå¯ä¸ç¨æ·ï¼å¹¶å 许ä»è¯»åå为 iphone_project çæ°é¡¹ç®ï¼
[group mobile]
members = scott
writable = iphone_project
ä¿®æ¹å®ä¹åï¼æ交 gitosis-admin éçæ¹å¨ï¼å¹¶æ¨éå°æå¡å¨ä½¿å ¶çæï¼
$ git commit -am 'add iphone_project and mobile group'[master 8962da8] add iphone_project and mobile group
1 file changed, 4 insertions(+)
$ git push origin master
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:gitosis-admin.git
fb27aec..8962da8 master -> master
6,æ·»å æ°é¡¹ç®å°ä»åºç§
å¨æ°å·¥ç¨ iphone_project éé¦æ¬¡æ¨éæ°æ®å°æå¡å¨åï¼å¾å 设å®è¯¥æå¡å¨å°å为è¿ç¨ä»åºãä½ä½ ä¸ç¨äºå å°æå¡å¨ä¸æå·¥å建该项ç®ç裸ä»åºâ Gitosis ä¼å¨ç¬¬ä¸æ¬¡éå°æ¨éæ¶èªå¨å建ï¼
$ git remote add origin git@gitserver:iphone_project.git
$ git push origin master
Initialized empty Git repository in /opt/git/iphone_project.git/
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:iphone_project.git
* [new branch] master -> master
请注æï¼è¿éä¸ç¨ææå®æ´è·¯å¾ï¼å®é ä¸ï¼å¦æå ä¸åè没ç¨ï¼ï¼åªéè¦ä¸ä¸ªåå·å 项ç®ååå³å¯ â Gitosis ä¼èªå¨å¸®ä½ æ å°å°å®é ä½ç½®ã
è¦åæå们å¨ä¸ä¸ªé¡¹ç®ä¸ååå·¥ä½ï¼å°±å¾éæ°æ·»å ä»ä»¬çå ¬é¥ãä¸è¿è¿æ¬¡ä¸ç¨å¨æå¡å¨ä¸ä¸ä¸ªä¸ä¸ªæ工添å å° ~/.ssh/authorized_keys æ件æ«ç«¯ï¼èåªé管ç keydir ç®å½ä¸çå ¬é¥æ件ãæ件çå½åå°å³å®å¨ gitosis.conf ä¸å¯¹ç¨æ·çæ è¯ãç°å¨æ们为 Johnï¼Josie å Jessica æ·»å å ¬é¥ï¼
$ cp /tmp/id_rsa.john.pub keydir/john.pub
$ cp /tmp/id_rsa.josie.pub keydir/josie.pub
$ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub
ç¶åæä»ä»¬é½å è¿ mobile å¢éï¼è®©ä»ä»¬å¯¹ iphone_project å ·æ读åæéï¼
[group mobile]
members = scott john josie jessica
writable = iphone_project
å¦æä½ æ交并æ¨éè¿ä¸ªä¿®æ¹ï¼å个ç¨æ·å°åæ¶å ·æ该项ç®ç读åæéã
Gitosis ä¹å ·æç®åç访é®æ§å¶åè½ãå¦ææ³è®© John åªæ读æéï¼å¯ä»¥è¿æ ·åï¼
[group mobile]
members = scott josie jessica
writable = iphone_project
[group mobile_ro]
members = johnreadonly = iphone_project
ç°å¨ John å¯ä»¥å éåè·åæ´æ°ï¼ä½ Gitosis ä¸ä¼å 许ä»å项ç®æ¨éä»»ä½å 容ãåè¿æ ·çç»å¯ä»¥éæå建ï¼å¤å°ä¸éï¼æ¯ä¸ªé½å¯ä»¥å å«è¥å¹²ä¸åçç¨æ·å项ç®ãçè³è¿å¯ä»¥æå®æ个ç»ä¸ºæåä¹ä¸ï¼å¨ç»ååå ä¸ @ åç¼ï¼ï¼èªå¨ç»§æ¿è¯¥ç»çæåï¼
[group mobile_committers]
members = scott josie jessica
[group mobile]
members = @mobile_committers
writable = iphone_project
[group mobile_2]
members = @mobile_committers john
writable = another_iphone_project
å¦æéå°æå¤é®é¢ï¼è¯è¯çæ loglevel=DEBUG å å° [gitosis] ç段è½ï¼è¯æ³¨ï¼ææ¥å¿è®¾ç½®ä¸ºè°è¯çº§å«ï¼è®°å½æ´è¯¦ç»çè¿è¡ä¿¡æ¯ãï¼ãå¦æä¸ä¸å°å¿æéäºé ç½®ï¼å¤±å»äºæ¨éæéï¼ä¹å¯ä»¥æ工修æ¹æå¡å¨ä¸ç /home/git/.gitosis.conf æ件 â Gitosis å®é æ¯ä»è¯¥æ件读åä¿¡æ¯çãå®å¨å¾å°æ¨éæ°æ®æ¶ï¼ä¼ææ°ç gitosis.conf åå°è¯¥è·¯å¾ä¸ãæ以å¦æä½ æå·¥ç¼è¾è¯¥æ件çè¯ï¼å®ä¼ä¸ç´ä¿æå°ä¸æ¬¡å gitosis-admin æ¨éæ°çæ¬çé ç½®å 容为