Git使用
官网地址
git的使用还是挺复杂的,由于精力有限,这里只是总结了一些简单的使用,满足日常工作即可,如果不能满足日常工作,查阅相关资料,再做完善
git安装
linux(ubuntu14)下安装
1.sudo apt-get install git
2.查看git版本 git –version
windows下安装
1.网上下载一个git工具工具,安装完成即可在windows下使用git
2.常用的工具为:msysgit
修改配置
克隆下来的git仓库中有个.git的隐藏文件夹,其中的config文件为git的配置文件,编辑这个config文件可以修改配置。
也可以使用命令进行修改配置:
1.git config –global user.name …
2.git config –global user.email …
3.git config –global color.ui true :颜色,不设置,默认都是黑色
可视化工具
官网
smartgithg分为三个版本:
试用版30天
商业版,需要证书,有技术支持
个人版,不需要证书,没有技术支持
使用时候选择3 个人版。如果选择的是使用版,30天过期后,把home下的隐藏文件夹.smartgit删掉,重新启动smartgit可以重新选择版本
PyCharm连接Git
File -> Close Project 进入“Welcome to PyCharm ”
点击VCS Check out from Version Control 选择Git
选项说明
Vcs Repository URL:(远程Git地址)如ssh://git@192.168.1.136/srv/inc-eking-web.git
Parent Directory:拷贝到本地的位置。
DirectoryName:文件名称
pycharm本身自带了一些git的使用工具,不太好用,推荐使用smartgit
注:配置3之前生成证书(后续不需要输入密码)
git 忽略文件方法
在git文件夹(仓库)下,简历一个.gitignore(隐藏文件)即可。还有其他方法,这个方法,可以吧.gitignore文件提交到服务器上,其他用户可以pull,共享
.gitignore 的语法规范如下:
所有空行或者以注释符号 # 开头的行都会被 Git 忽略;
可以使用标准的 glob 模式匹配。 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
glob 模式匹配:
星号匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
问号(?)只匹配一个任意字符;
[0-9a-zA-Z] 在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9a-zA-Z] 表示匹配所有 0 到 9 的数字和所有字母);
转义字符。
注:理论上来说,在要忽略的格式文件后面添加注释是允许的,但经过我的验证,结果发现这样子操作并不能达到预期的效果。
一个 .gitignore 例子。
1.# 此为注释 – 将被 Git 忽略
2.# 忽略所有 .a 结尾的文件
3..a
4.# 但 lib.a 除外
5.!lib.a
6.# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
7./TODO
8.# 忽略 build/ 目录下的所有文件
9.build/
10.# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
11.doc/.txt
分支管理
分支可以协助不同的开发功能进行,比如发布会单拉出一个分支,bug修改会拉出一个分支,特性开发会拉出一个分支,不同的版本也会拉出一个分支,关于分支怎么管理,根据项目需求适当的拉分支。在分支上进行不同的开发,最总合并到一个分支上(一般是master分支),具体怎么管理分支跟Git工作流有关
Git工作流
一个好的工作流方式能很好地管理日常工作,工作流可以理解为分支的checkout与合并?有关工作流相关的资料,网上查阅吧,比较经典的是GitHub工作流?
常用命令
具体的命令使用请参考其他网站
创建git仓库
1.sudo git init –bare repertoryname.git
Git就会创建一个裸仓库(repertoryname),裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
克隆远程仓库
1.git clone ssh://username@serveraddress:port/repertoryname.git
例如:
1.git clone ssh://git@192.168.0.201/srv/inc-eking-web.git 缺省端口号,默认58001
2.git clone ssh://git@xxx.xxx.xxx.xxx:58011/srv/inc-eking-web.git
3.git clone ssh://git@www.example.com/srv/inc-eking-web.git
下拉数据
1.git pull origin 分支名
例如:
1.git pull origin master
提交数据
1.git add –all
2.git commit -m “My commit”
3.git push -u origin master
开分支
1.git branch 新分支名
例如,在master分支下,新开一个开发分支:
1.git branch dev
切换到新的分支
1.git checkout 分支名
例如,在master分支下,切换到新开的dev:
1.git checkout dev
开分支和切换分支合并到一个命令
1.git checkout -b 新分支名
例如,新开一个开发分支,并立即切换到该分支:
1.git checkout -b dev
切换到原分支
1.git checkout 原分支名
例如,切换回master:
1.git checkout master
注意:当前分支有修改,还未commit的时候,会切换失败,应当先commit,但可以不用push
合并分支
1.git merge 需要合并的分支名
例如,刚刚已经切换回master,现在需要合并dev的内容:
1.git merge dev
建议在GitLab(或者其他git系统)上面创建merge request的形式来进行分支的合并和代码审核。
查看本地分支列表
1.git branch -a
前面带remotes/origin 的,是远程分支
查看远程分支列表
1.git branch -r
向远程提交本地新开的分支
1.git push origin 新分支名
例如,刚刚在master下新开的dev分支:
1.git push origin dev
删除远程分支
1.git push origin :远程分支名
例如,删除刚刚提交到远程的dev分支:
1.git push origin :dev
删除本地分支
1.git branch 分支名称 -d
例如,在master分支下,删除新开的dev分支:
1.git branch dev -d
注意:如果dev的更改,push到远程,在GitLab(或者其他git系统)上面进行了merge操作,但是本地master没有pull最新的代码,会删除不成功,可以先git pull origin master,或者强制删除:git branch dev -D
更新分支列表信息
1.git fetch -p
git远程仓库搭建
可以使用git代码托管服务器,git的代码托管服务很多,名气最大的莫过于Github,其他还有GitLab、Bitbucket、CSDN-CODE、Git@OSC等等,如果代码比较重要,可以自己搭建git服务器,假设你已经有sudo权限的用户账号,下面,正式开始安装。
第一步,安装git:
1.sudo apt-get install git
第二步,创建一个git用户,用来运行git服务:
1.sudo adduser git
第三步,创建证书:
证书的作用:一些软件(比如git)要请求远程机器上的数据,可以使用证书,就不用每次请求数据时都输入远程机器的用户名和密码了.
终端根目录中输入:ssh-keygen -t rsa -C “wangshubin@eking.mobi” 然后一路回车
进入.ssh目录 cd ~/.ssh (~是根目录)
cat id_rsa.pub
远程连接其他机器:ssh eking@xxx.xxx.xxx.xxx 或者 sshpass -p ‘xxxxx’ ssh admin@xxx.xxx.xxx.xxx (可以将此条命令建成sh文件,如果有很多远程机器需要维护,这样可以方便链接)
进入远程机器的.ssh目录 cd /home/git/.ssh
vi编辑authorized_keys文件(一般.ssh目录下就这一个文件) 将3步中生成的key添加到authorized_keys文件中,一行一个
注:cd /home/git/.ssh(git指的是用户名,每个用户下会有一个.ssh文件夹,这个文件夹只有经过相应的ssh操作才会存在,不存在可以手动添加一个,authorized_keys文件如果不存在可以添加一个.)
第四步,初始化Git仓库:
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
1.sudo git init –bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
然后,把owner改为git,让这个目录可以通过git用户访问:
1.sudo chown -R git:git sample.git
第五步,禁用shell登录:
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:
1.git❌1001:1001:,,,:/home/git:/bin/bash
改为:
1.git❌1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
第六步,克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
1.git clone git@server:/srv/sample.git
显示如下信息表明成功(前提这个库是空的):
1.Cloning into \’sample\’…
2.warning: You appear to have cloned an empty repository.
其他
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。