linuxgit配置
A. 如何在linux搭建git远程版本库
服务端配置
1、安装git
2、新建一个用户,只能用来上传代码,而不能通过ssh登录,比如git用户
adser git
chsh -s $(command -v git-shell) git
使用git-shell替换bash ,这样git用户就不能通过ssh登录
这一步会有警告,提示git-shell不在shell列表里,不用担心。
3、添加ssh公钥,在/home/git/.ssh/authorized_keys里添加客户端的公钥,一行一个。
如果没有文件,可以新建
mkdir /home/git/.ssh
touch /home/git/.ssh/authorized_keys
客户端生成公钥的方法是 ssh-keygen,
windows的在C:\Users\用户名\.ssh\ 目录下,打开id_rsa.pub
4、初始化一个空的git仓库
cd /var
git init --bare sample.git
chown -R git:git sample.git
这一步是让目录可以被git用户修改,否则会出现“permission denied”错误。
客户端
1、可以git clone了
git clone git@服务器:/var/sample.git 即服务器上的文件路径
或者ssh,建议ssh,方便设置端口号
git clone ssh://git@服务器:端口号/var/sample.git
B. 在Linux下搭建Git服务器
众所周知,版本系统在开发环境中是必不可少的,但是我们可以把代码免费的托管到GitHub上,如果我们不原意公开项目的源代码,公司又不想付费使用,那么我们可以自己搭建一台Git服务器,可以用Gitosis来管理公钥,还是比较方便的。
搭建环境:
服务器 CentOS6.6 + git(version 1.8.3.1)
客户端 Windows10 + git(version 2.11.1.windows.1)
1. 安装Git相关软件
Linux是服务器端系统,Windows作为客户端系统,分别安装Git
安装客户端:
下载 Git for Windows,地址:https://git-for-windows.github.io/
安装完之后,可以使用Git Bash作为命令行客户端。
安装Gitosis
出现下面的信息表示安装成功了
2. 服务器端创建git用户来管理Git服务
3. 配置公钥
在Windows上配置管理者,git服务器需要一些管理者,通过上传开发者机器的公钥到服务器,添加成为git服务器的管理者,打开git命令行
4. 配置gitosis
使用git用户并初始化gitosis
在Windows上机器上clone gitosis-admin到管理者主机
gitosis.conf: git服务器配置文件
keydir: 存放客户端公钥
配置 gitosis.conf 文件
在Windows管理者机器上创建本地test仓库,并上传到git服务端
提交到远程服务器
服务端会自动创建test仓库
5.添加其他git用户开发者
由于公司开发团队人数不断增多,手动添加开发者私钥到/home/git/.ssh/authorized_keys比较麻烦,通过上面的Windows机器的管理者统一收集其他开发者的私钥id_rsa.pub文件,然后传到服务器上,配置好后,用户即获得项目权限,可以从远程仓库拉取和推送项目,达到共同开发项目。
推送完成后,新加进来的开发者就可以进行项目的开发了,后续增加人员可以这样添加进来,开发者直接把仓库clone下来就可以了。
C. Linux绯荤粺涓婫it镄勫熀链閰岖疆鍜屼娇鐢ㄧず渚
git config閰岖疆鏂囦欢
涓.Git宸茬粡鍦ㄤ綘镄勭郴缁熶腑浜嗭纴浣犱细锅氢竴浜涗簨𨱍呮潵瀹㈡埛鍖栦綘镄凣it鐜澧冦备綘鍙闇瑕佸仛杩欎簺璁剧疆涓娆;鍗充娇浣犲崌绾т简锛屼粬浠涔熶细缁戝畾鍒颁綘镄勭幆澧冧腑銆备綘涔熷彲浠ュ湪浠讳綍镞跺埢阃氲繃杩愯屽懡浠ゆ潵閲嶆柊镟存敼杩欎簺璁剧疆銆
Git链変竴涓宸ュ叿琚绉颁负git config锛屽畠鍏佽镐綘銮峰缑鍜岃剧疆閰岖疆鍙橀噺;杩欎簺鍙橀噺鍙浠ユ带鍒禛it镄勫栬傚拰镎崭綔镄勫悇涓鏂归溃銆傝繖浜涘彉閲忓彲浠ヨ瀛桦偍鍦ㄤ笁涓涓嶅悓镄勪綅缃锛
1./etc/gitconfig 鏂囦欢锛氩寘钖浜嗛傜敤浜庣郴缁熸墍链夌敤鎴峰拰镓链夊簱镄勫笺傚傛灉浣犱紶阃掑弬鏁伴夐”钬--system钬 缁 git config锛屽畠灏嗘槑纭镄勮诲拰鍐栾繖涓鏂囦欢銆
2.~/.gitconfig 鏂囦欢 锛氩叿浣揿埌浣犵殑鐢ㄦ埛銆备綘鍙浠ラ氲繃浼犻--global 阃夐”浣縂it 璇绘垨鍐栾繖涓鐗瑰畾镄勬枃浠躲
3.浣崭簬git鐩褰旷殑config鏂囦欢 (涔熷氨鏄 .git/config) 锛氭棤璁轰綘褰揿墠鍦ㄧ敤镄勫簱鏄浠涔堬纴鐗瑰畾鎸囧悜璇ュ崟涓镄勫簱銆傛疮涓绾у埆閲嶅啓鍓崭竴涓绾у埆镄勫笺傚洜姝わ纴鍦.git/config涓镄勫艰嗙洊浜嗗湪/etc/gitconfig涓镄勫悓涓涓鍊笺
鍦╓indows绯荤粺涓锛孏it鍦$HOME鐩褰曚腑镆ユ垒.gitconfig鏂囦欢(瀵瑰ぇ澶氭暟浜烘潵璇达纴浣崭簬C:Documents and Settings$USER涓)銆傚畠涔熶细镆ユ垒/etc/gitconfig锛屽敖绠″畠鏄鐩稿逛簬Msys 镙圭洰褰旷殑銆傝繖鍙鑳芥槸浣犲湪Windows涓杩愯屽畨瑁呯▼搴忔椂鍐冲畾瀹夎匞it镄勪换浣曞湴鏂广
浜.浣犵殑镙囱瘑(Your Identity)
2.1銆褰扑綘瀹夎匞it钖庨栧厛瑕佸仛镄勪簨𨱍呮槸璁剧疆浣犵殑鐢ㄦ埛钖岖О鍜宔-mail鍦板潃銆傝繖鏄闱炲父閲嶈佺殑锛屽洜涓烘疮娆Git鎻愪氦閮戒细浣跨敤璇ヤ俊鎭銆傚畠琚姘歌繙镄勫祵鍏ュ埌浜嗕綘镄勬彁浜や腑锛
浠g爜濡备笅:
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
閲岖敌涓阆嶏纴浣犲彧闇瑕佸仛涓娆¤繖涓璁剧疆銆傚傛灉浣犱紶阃掍简 --global 阃夐”锛屽洜涓篏it灏嗘绘槸浼氢娇鐢ㄨヤ俊鎭𨱒ュ勭悊浣犲湪绯荤粺涓镓锅氱殑涓鍒囨搷浣溿傚傛灉浣犲笇链涘湪涓涓鐗瑰畾镄勯”鐩涓浣跨敤涓嶅悓镄勫悕绉版垨e-mail鍦板潃锛屼綘鍙浠ュ湪璇ラ”鐩涓杩愯岃ュ懡浠よ屼笉瑕--global阃夐”銆
2.2 浣犵殑缂栬緫鍣(Your Editor)
鐜板湪锛屼綘镄勬爣璇嗗凡缁忚剧疆锛屼綘鍙浠ラ厤缃浣犵殑缂虹渷鏂囨湰缂栬緫鍣锛孏it鍦ㄩ渶瑕佷綘杈揿叆涓浜涙秷鎭镞朵细浣跨敤璇ユ枃链缂栬緫鍣ㄣ傜己鐪佹儏鍐典笅锛孏it浣跨敤浣犵殑绯荤粺镄勭己鐪佺紪杈戝櫒锛岃繖阃氩父鍙鑳芥槸vi 鎴栬 vim銆傚傛灉浣犳兂浣跨敤涓涓涓嶅悓镄勬枃链缂栬緫鍣锛屼緥濡侲macs锛屼綘鍙浠ュ仛濡备笅镎崭綔锛
浠g爜濡备笅:
$ git config --global core.editor emacs
2.3 浣犵殑姣旇缉宸ュ叿(Your Diff Tool)
鍙﹀栦竴涓浣犲彲鑳介渶瑕侀厤缃镄勬湁鐢ㄧ殑阃夐”鏄缂虹渷镄勬瘆杈冨伐鍏峰畠鐢ㄦ潵瑙e喅钖埚苟镞剁殑鍐茬獊銆备緥濡傦纴浣犳兂浣跨敤vimdiff:
浠g爜濡备笅:
$ git config --global merge.tool vimdiff
Git鍙浠ユ帴鍙梜diff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 鍜 opendiff浣滀负链夋晥镄勫悎骞跺伐鍏枫备綘涔熷彲浠ヨ剧疆涓涓瀹㈡埛鍖栫殑宸ュ叿;镆ョ湅绗7绔犺幏寰楁洿澶氩叧浜庢ょ殑淇℃伅銆
2.4 妫镆ヤ綘镄勮剧疆(Checking Your Settings)
濡傛灉浣犳兂妫镆ヤ綘镄勮剧疆锛屼綘鍙浠ヤ娇鐢 git config --list 锻戒护𨱒ュ垪鍑篏it鍙浠ュ湪璇ュ勬垒鍒扮殑镓链夌殑璁剧疆:
浠g爜濡备笅:
$ git config --list
user.name=Scott Chacon
[email protected]
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
浣犲彲鑳戒细鐪嫔埌涓涓鍏抽敭瀛楀嚭鐜板氭★纴杩欐槸锲犱负Git浠庝笉钖岀殑鏂囦欢涓(渚嫔傦细/etc/gitconfig浠ュ强~/.gitconfig)璇诲彇鐩稿悓镄勫叧阌瀛椼 鍦ㄨ繖绉嶆儏鍐典笅锛屽规疮涓鍞涓镄勫叧阌瀛楋纴Git浣跨敤链钖庣殑闾d釜鍊笺
浣犱篃鍙浠ユ煡鐪婫it璁や负镄勪竴涓鐗瑰畾镄勫叧阌瀛楃洰鍓岖殑鍊硷纴浣跨敤濡备笅锻戒护 git config {key}:
浠g爜濡备笅:
$ git config user.name
Scott Chacon
2.5 銮峰彇甯锷(Getting help)
濡傛灉褰扑綘鍦ㄤ娇鐢℅it镞堕渶瑕佸府锷╋纴链変笁绉嶆柟娉曞彲浠ヨ幏寰椾换浣昰it锻戒护镄勬坠鍐岄〉(manpage)甯锷╀俊鎭:
浠g爜濡备笅:
$ git help
$ git --help
$ man git-
渚嫔傦纴浣犲彲浠ヨ繍琛屽备笅锻戒护銮峰彇瀵筩onfig锻戒护镄勬坠鍐岄〉甯锷:
浠g爜濡备笅:
$ git help config
杩欎簺锻戒护闱炲父鍙嫔ソ锛屽洜涓轰綘鍙浠ュ湪浠讳綍鍦版柟瀛桦彇浠栦滑锛屽嵆浣块潪鍦ㄧ嚎鐘舵併傚傛灉镓嫔唽椤靛拰链涔︿粛铹朵笉瓒宠屼綘闇瑕佷釜浜虹殑甯锷╋纴浣犲彲浠ヨ瘯镌浣跨敤Freenode IRCServer涓婄殑#git鎴#github 棰戦亾(irc.freenode.net)銆傝繖浜涢戦亾浼氩畾链熺敱鏁扮栌涓瀵笹it闱炲父镡熸倝镄勪笓涓氢汉澹镓缁存姢锛屼粬浠浼氶潪甯镐箰镒忓府锷╀綘銆
2.6 镐荤粨(Summary)
浣犲簲璇ュ笹it鏄浠涔堜互鍙奊it涓庝綘鍙鑳戒娇鐢ㄧ殑鍏跺畠CVCS涔嬮棿镄勪笉钖屾湁浜嗕竴涓锘烘湰镄勪简瑙c备綘涔熷簲褰揿湪浣犵殑绯荤粺涓链変简涓涓鍏锋湁浣犱釜浜烘爣璇嗙殑鍙浠ュ伐浣灭殑Git鐗堟湰銆傛槸镞跺欐潵瀛︿範涓浜汫it镄勫熀链鐭ヨ瘑浜嗐
git 瀹为檯浣跨敤璁板綍
1銆乬it 鎻愪氦浠g爜阌栾瀹炰緥鍒嗘瀽
浠g爜濡备笅:
$ git push origin master
浠g爜濡备笅:
To [email protected]:k6.git
! [rejected] master - master (non-fast-forward)
error: failed to push some refs to '[email protected]:k6.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again. See the 'Note about
fast-forwards' section of 'git push --help' for details.
cbk@YCS:~/work/k6_130708/k6$ git fecth
git: 'fecth' is not a git command. See 'git --help'.
git push 阌栾锛屽洜涓烘病链夊厛pull链鏂扮殑浠g爜锛岄渶瑕佷互涓嬫搷浣滐细
浠g爜濡备笅:
$ git fetch origin
$ git merge origin/master
$ git push origin master
濡傛灉瀹夎単it钖庢病链夎剧疆浣犵殑鐢ㄦ埛钖岖О鍜宔-mail鍦板潃锛岃缮闇瑕佸厛镓ц岋细
浠g爜濡备笅:
$ git config --global user.name "cbk"
$ git config --global user.email [email protected]
杩欐槸闱炲父閲嶈佺殑锛屽洜涓烘疮娆Git鎻愪氦閮戒细浣跨敤璇ヤ俊鎭銆傚畠琚姘歌繙镄勫祵鍏ュ埌浜嗕綘镄勬彁浜や腑锛
閲岖敌涓阆嶏纴浣犲彧闇瑕佸仛涓娆¤繖涓璁剧疆銆傚傛灉浣犱紶阃掍简 --global 阃夐”锛屽洜涓篏it灏嗘绘槸浼氢娇鐢ㄨヤ俊鎭𨱒ュ勭悊浣犲湪绯荤粺涓镓锅氱殑涓鍒囨搷浣溿傚傛灉浣犲笇链涘湪涓涓鐗瑰畾镄勯”鐩涓浣跨敤涓嶅悓镄勫悕绉版垨e-mail鍦板潃锛屼綘鍙浠ュ湪璇ラ”鐩涓杩愯岃ュ懡浠よ屼笉瑕--global阃夐”銆
鍏蜂綋鍒版ら梾棰桡纴濡傛灉娌℃湁璁剧疆浣犵殑鐢ㄦ埛钖岖О鍜宔-mail鍦板潃锛屽垯涓鐩存g‘镞犳硶push浠g爜銆
2銆丢it 璺熻釜涓涓鏂囦欢镄勬彁浜ゅ巻鍙茶板綍
鍦ㄨ窡韪狝ndroid浠g爜鏄锛屾湁镞跺椤彂鐜版煇涓鍏抽敭鏂囦欢琚鏀瑰姩浜嗭纴闇瑕佽窡韪镆ョ湅瀵硅繖涓鍏抽敭鏂囦欢镄勬墍链塩ommit镄勮板綍锛屼互渚跨悊瑙e叾涓镄勪慨鏀瑰师锲犲拰杩囩▼锛
浠g爜濡备笅:
git log -p 钬渇ile name钬
鏄剧ず杩欎釜鏂囦欢镄勬疮涓琛岀殑链钖庢彁浜commit锛屾柟渚垮畾浣峜ommit锛
浠g爜濡备笅:
git blame 钬渇ile name"
鏄剧ずlog璇︾粏淇鏀硅板綍锛
git show [log_id_num]锛屼緥濡傦细
浠g爜濡备笅:
git show
3銆乬it鍒濆嫔寲涔媑it config
1). 涓嬮溃镄勫懡浠ゅ皢淇鏀/home/[username]/.gitconfig鏂囦欢锛屼篃灏辨槸璇翠笅闱㈢殑閰岖疆鍙瀵规疮涓涓狲sh镄勭敤鎴峰彲瑙侊纴镓浠ユ疮涓浜洪兘闇瑕佸仛銆
鎻愪氦浠g爜镄刲og閲岄溃浼氭樉绀烘彁浜よ呯殑淇℃伅
浠g爜濡备笅:
git config --global user.name [username]
git config --global user.email [email]
鍦╣it锻戒护涓寮钖棰滆壊鏄剧ず
浠g爜濡备笅:
git config --global color.ui true
2). 涓嬮溃镄勫懡浠ゅ皢淇鏀/etc/gitconfig鏂囦欢锛岃繖鏄鍏ㄥ眬閰岖疆锛屾墍浠admin𨱒ュ仛涓娆″氨鍙浠ヤ简銆
閰岖疆涓浜沢it镄勫父鐢ㄥ懡浠alias
浠g爜濡备笅:
sudo git config --system alias.st status #git st
sudo git config --system alias.ci commit #git commit
sudo git config --system alias.co checkout #git co
sudo git config --system alias.br branch #git branch
3). 涔熷彲浠ヨ繘鍏ュ伐浣沧牴鐩褰曪纴杩愯実it config -e锛岃繖镙峰氨鍙浼氢慨鏀瑰伐浣滃尯镄.git/config鏂囦欢锛屼絾鏄𨱌傛椂杩樼敤涓岖潃.
git config鏂囦欢镄刼verride椤哄簭鏄3)1)2).
4.鐗堟湰锲为
浠g爜濡备笅:
git reset --hard commit_id
浠g爜濡备笅:
git checkout commit_id
浠g爜濡备笅:
git clean 钬揹f commit_id