资源描述
1. Github与SmartGit使用说明与建议
分类: 开源项目(Open Source)2012-05-18 10:46 3856人阅读 评论(0) 收藏 举报
branchgraph审查
本文出自:
当使用github做协同的时候,我们常常需要在客户端安装相应的软件,SmartGit就是一款非常出色的软件,不过是要付费的,我们可以使用non-commercial版本。
使用SmartGit的时候,应该注意一下几点:
1 以文件作为同步的最小单位,每个人拥有对某个文件的所有权,别人不要做任何改动(规约优于配置),如果两个人共同维护一个文件,则由一人来完成同步操作。
2 在push到github前要先从github上pull最新版本。
3 在push之前,对照自己改动的版本进行审查(只push自己拥有所有权的文件),可以点击右上角的review按钮进行对比新旧版本的异同。
关于github上graph的分支的问题,如果规约好每个人以串行化方式完全按照以上几点进行操作,就不会出现”分支“。当然起分支完全没有问题,这是一种正常的现象,github也支持这样做。
如果不需要其它branch,我们在push的时候是要选择current branch master进行push的。
2. smartgit 中文乱码问题解决
博客分类:
· moqui 入门系列
使用最新的smartgit 4.0.5的时候,发现版本比较时,如果有中文会乱码(3点几版本时中文是横过来的,就没过多关心),哪怕源文件已经是UTF8的编码。(这里偷偷告诉你下:3的keygen可以适用于4.0.5)
搜索发现smartgit能自动识别带BOM的utf8,但是无BOM的utf8不能识别。
这时,可以通过修改respository的设置的text-encoding指定到utf8即可。如下图所示:
参考文章:
3. SMARTGIT的使用
1、使用Git Bash 生成system key
ssh-keygen -t rsa
会有生成key的位置
2、将key添加到gitlab
3、打开SmartGit
在Edit中–preference–Authentication–Use system SSH client
4、在project中用clone
4. What's New in SmartGit/Hg 5
4.1 GitHub: Pull Requests and Comments
If you are using GitHub or have an own GitHub Enterprise instance, you can use Pull Requests and Comments features from inside SmartGit/Hg. Instead of leaving the responsibility to merge fixes or new features to all developers, they can send a Pull Request to the system integrator. The system integrator then will fetch the pull request commits, review them and either merge or reject the pull request.
The Comments feature comes in handy, because it allows to add comments to lines of committed files, e.g. as feed-back to a pull request.
SmartGit/Hg now supports 2-factor authentication to connect to the GitHub server and relies on API tokens instead of passwords. This improves security, because you have to share the GitHub account password with SmartGit/Hg only once, or you can even manually generate the token from the web-fronted. GitHub Enterprise instances are well-supported now and you can have multiple accounts, for and for Enterprise instances at the same time.
4.2 Issue-Linking
In contrast to SVN Git is lacking a standardized way to define how to detect issues in commit messages and convert them to links to your issue tracker. SmartGit/Hg goes ahead and supports configurations similar to SVN's bugtraq:* properties. More information you can find at
4.3 Improved Log
The Log now allows to pull and push. To visually distinguish unpushed commits, they are shown with orange color and are connected to their parents with thin lines. Tracking branches show how much commits they are ahead (develop 2>) or behind (develop <4) their tracked branch.
Several commands — e.g. to move the head (checkout), reset current branch, move arbitrary refs, cherry-pick or rebase a commit range — now can be performed with drag-and-drop.
4.4 Blame (Mercurial)
SmartGit/Hg now also supports a powerful Blame for Mercurial with navigation in the line history.
4.5 Shelves (Mercurial)
Git has stashes and Mercurial has shelves. SmartGit/Hg now also adds support for Mercurial shelves, so you can save local changes quickly to get a clean repository and apply the changes again later.
4.6 Miscellaneous
For repositories with multiple remotes one now can select on what remote Git-Flow should operate (gitflow.origin).
For those who want to write perfect Git commit messages, SmartGit now optionally shows line length guides at 50/72 characters.
Different files might require different merge tools (e.g. for text or special binary files). As for file comparators, SmartGit/Hg now allows to configure different Conflict Solvers depending on the file name.
Sometimes it makes sense to ignore modified, but versioned files. Git allows to mark files with the assume-unchanged flag. SmartGit/Hg allows to toggle this flag and you can choose whether to show or hide these files.
4.7 Many more...
For a complete list of all changes, please refer to the Change Log.
5. Git&Github社区化协作使用指南
5.1 Git客户端的下载与安装
Git就是一个版本控制系统,学会使用Git的命令行,就可以在任何支持Git的托管服务器以及个人项目中使用。所以,这篇文章侧重讲解Git的命令。
只有托管服务器,没有客户端也不行啊。在Windows下,比较知名的客户端是msysgit。下载地址,猛搓这里。
下载完成后安装,看着说明,一路“Next”就OK。安装完成之后,桌面上会有一个“Git Bash”的快捷方式,双击打开,我们一下的操作,将主要在这里完成。
最近听说SmartGit很好很强大,D瓜哥今天试玩了一下,确实不错,很棒的图形用户界面的工具。感兴趣的,可以自己玩玩。
5.2 视频: Git&Github使用简介
5.3 Git的配置
古人云:“工欲善其事,必先利其器。”安装完成之后,我们需要做一些配置,才能使用得得心应手。
5.3.1 基本信息配置
· 配置用户名
1
git config --global user.name <用户名>
· 用于Git的用户名。请注意,这个用户名只是作为一个标识,不用于进行服务器登录等。
· 配置邮箱
1
git config --global user.email <邮箱>
· 配置个人的电子邮箱。另外,也仅仅是一个标识,不用于登录服务器等;
基本信息就只需要配置这两项常用的。还可以配置默认编辑器等。这个在“中文乱码”中会讲解到,不再赘述。
5.3.2 SSH-Key配置
目前,可以和Github通信的主要方式以及特性有如下几种:
· SSH–这个是最安全的协议,我们也将采用这种这方式;
· HTTPS–该协议可以顺利“穿越长城,走向世界”。所以,如果“SSH”方式不行,可以试试这种方式;
使用SSH协议的话,我们需要配置SSH Key,其实就相当于一对密码。下面,我们开始倒腾。
· 测试通信状态
1
ssh -T git@
· 使用该命令测试一下与Github通信是否顺畅。如果测试其他Git托管服务器,只需要把后面的网址换成相应的网址就可以了。
如果显示出了你在Githu上的用户名,则表示已经配置过了,不需要再生成SSH Key了。
· 生成SSH Key
1
ssh-keygen
· 使用该命令,一路Enter下去,就会在C:\Users\Administrator\.ssh目录下,生成一对SSH key。
· 将公钥添加到Github上
打开C:\Users\Administrator\.ssh目录,使用Notepad++等现代文本编辑器(记事本就算了,而且还可能遇到问题)打开id_rsa.pub文件,将里面的内容全部拷贝下来,然后打开Github,打开个人设置页面,选中“SSH Key”选项,点击“Add SSH Key”按钮,然后在新新出现的表单中,填入标题,再将刚刚复制下来的内容,粘贴到“Key”栏,然后点击“Add Key”按钮,完成添加。
· 确认成功
1
ssh -T git@
· 再次执行该命令,如果反馈信息中有你的用户名,并且英文提示,授权成功,则表示配置成功。
5.3.3 中文乱码配置
中文乱码问题请参考我以前写的一篇文章,“彻底解决Git中文乱码问题 ”,这里就不再详述了。有问题请留言。
5.4 单兵作战
作为一个码农,或者说挨踢从业者,我们手头上估计会有好多代码、脚本等,托管到Github等代码托管到服务器上是一个非常好的选择。那么,我们该怎么办呢?
因为本文是为了方便参与“MySQL手册翻译”活动的朋友使用的,为了减少大家的不便,以下内容尽可能使用和该项目相关的URL等。
· 从服务器上获取已经建立的项目
1
git clone git@:diguage/manual56.git #注释:这是D瓜哥的分支,请换成自己的分支。
· 这条命令就会将我们在Github的项目克隆到本地。需要说明的是,项目会自动以项目名称建立文件夹,如果需要自定义文件夹名称,只需要在URL后面加上文件夹名即可。
· 如果对某项项目感兴趣,想研究研究,甚至参与进来,就要首先建立自己的分支:建立自己的分支也很简单,打开Github网站,进入项目的主页面,点击右上角的Fork按钮即可建立自己的分支,并且会自动跳转到自己的分支页面。
· 向版本库中添加文件
1
git add <文件名> #注释:可以在后面添加多个文件,只需要用空格隔开即可。
· 这条命令会将指定的文件添加到版本控制下。 添加之前,需要将这个文件拷贝的版本库所在的目录下。如果需要添加多个,可以使用参数-A,这样就不需要添加文件名,会自动将目录下所有文件添加到版本控制下。另外,如果不加入版本控制,则无法保存修改记录,也无法上传到Github上。
· 提交修改
1
git commit <文件名> #注释: 可以在后面添加多个文件,使用空格分割。
· 该命令会将文件修改记录提交到服务器上。如果需要添加多个,可以使用参数-a,这样就不需要添加文件名,会自动将目录下修改过的文件添加到版本控制下。
· 但是由于Git是分布式的版本控制系统,这个提交只是提交到本地服务器了,如果需要上推到Github上,还需要使用如下命令:
· 上推到Github上
1
git push origin master
· 这条命令会将所有提交的修改记录上推到Github上。 这里,origin代表项目的原始网址,就是上面git clone后面的网址。
如果是一个人玩的项目,这几条指令基本上可以满足我们的需求了。但是,“MySQL手册翻译”是一个社区化协作、多人参与的大型项目。这几条指令还远远不够。
5.5 百团大战
无论是有意寻来还是无意路过,也行都参与到了社区化协作。进行社区化协作,除了上面的指令外,我们还需要一起其他的命令。
· 建立自己的分支
建立自己的分支也很简单,打开Github网站,进入项目的主页面,点击右上角的Fork按钮即可建立自己的分支。然后,按照本文上面“单兵作战”描述的搞就可以了。
· 添加主库URL
1
git remote add mysql2cn git@:mysql2cn/manual56.git
· 先将自己的分支克隆岛本地。然后,通过这个命令,将主库的URL添加到本地的版本库里。然后就可以进行下面的命令
· 获取主库的修改
1
git fetch mysql2cn #注释:这里的<code>mysql2cn</code>要和上面的名字保持一致
· 社区化协作的时候,有好多人同时提交Pull Request到主库。我们可以使用该命令将主库的修改同步到本地。
· 合并主库代码到自己的分支上
1
git merge mysql2cn/master master #注释:将主库的主分支合并的到自己分支的主分支上。
合并过程难免会遇到冲突,这个需要手动解决冲突。命令:
1
git pull mysql2cn master
等同于上面的两条命令。但是,D瓜哥还是习惯分开来写。另外,我们也可以使用这条命令同步自己分支到本地。具体如下:
1
git pull origin master
· 上推到Github上
1
git push origin master
· 这条命令会将所有提交的修改记录上推到Github上。
· 向主库申请合并
社区化协作项目,不能自己玩,还需要将你做的修改提交到主库。这时候命令行已经力所不能及了。需要到网页上,打开自己分支的页面,在代码显示区域的右上角有一个“Pull Request”,然后根据提示一步一步走下去就可以了。如果不明白,请看视频。
5.6 看我七十二变
分支管理,大家请看阮一峰老师的文章"Git分支管理策略"。内容讲解的非常细致到位。D瓜哥就不献丑了。
5.7 锦上添花
上面介绍的这些命令基本上可以满足我们一般的需求了。但是,我们追求的是“更快,更高,更强”。所以,有必要再了解一些指令。
· 查看版本库状态–务必掌握,经常使用
1
git status
· 该指令用于查看版本库目前的状态;返回的第一行表示在哪个分支上,还会显示没有提交的文件列表、没有添加到版本库中的文件列表,同时还会推荐一些操作这些文件时可能用到的命令等;
· 这个命令我用的最多,在不确定有哪些文件需要提交,哪些文件还没有提交到版本库时,我就会常常执行一下这个命令。还请大家务必掌握。
· 指令别名
1
git config --global alias.ci commit
· 原生的Git命令有的好长,给指令起个别名,简化一下指令,简化后的指令如下:
1
git ci #注释:等价于git commit
· 查看日志
1
git log
· 折腾命令可以查看我们的提交记录。需要注意的是,点击q键退出。说实话,原生态的日志真心不好看,在酷壳网看到了一个美化命令。如下:
1
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --"
· 这时,我们就可以使用如下命令,查看美化后的日志了:
1
git lg
· 查看文件的修改
1
git diff <文件名>
· 这条命令可以查看一下都对文件做了哪些修改。
· 回滚修改
1
git checkout <文件名>
· 该命令可以将没有提交的修改回滚到以后版本。
· 删除文件
1
git rm <文件名>
· 该命令可以将文件从Git版本控制中删除,并且还将从磁盘中删除。
· 从版本控制中删除文件
1
git rm --cached <文件名>
· 该命令只是将文件从版本控制中删除。但是不在磁盘上删除文件。
· 文件从命名
1
git mv <旧文件名> <新文件名>
· 该命令不仅可修改文件名,还会将曾经的修改记录一起带过来。
6. Git常用命令备忘
6.1 Git配置
git config --global user.name "robbin"
git config --global user.email "fankai@"
git config --global color.ui true
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global core.editor "mate -w" # 设置Editor使用textmate
git config -l # 列举所有配置
用户的git配置文件~/.gitconfig
6.2 Git常用命令
6.2.1 查看、添加、提交、删除、找回,重置修改文件
git help <command> # 显示command的help
git show # 显示某次提交的内容
git show $id
git co -- <file> # 抛弃工作区修改
git co . # 抛弃工作区修改
git add <file> # 将工作文件修改提交到本地暂存区
git add . # 将所有修改过的工作文件提交暂存区
git rm <file> # 从版本库中删除文件
git rm <file> --cached # 从版本库中删除文件,但不删除文件
git reset <file> # 从暂存区恢复到工作文件
git reset -- . # 从暂存区恢复到工作文件
git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
git ci <file>
git ci .
git ci -a # 将git add, git rm和git ci等操作都合并在一起做
git ci -am "some comments"
git ci --amend # 修改最后一次提交记录
git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
git revert HEAD # 恢复最后一次提交的状态
6.2.2 查看文件diff
git diff <file> # 比较当前文件和暂存区文件差异
git diff
git diff <$id1> <$id2> # 比较两次提交之间的差异
git diff <branch1>..<branch2> # 在两个分支之间比较
git diff --staged # 比较暂存区和版本库差异
git diff --cached # 比较暂存区和版本库差异
git diff --stat # 仅仅比较统计信息
6.2.3 查看提交记录
git log
git log <file> # 查看该文件每次提交记录
git log -p <file> # 查看每次详细修改内容的diff
git log -p -2 # 查看最近两次详细修改内容的diff
git log --stat # 查看提交统计信息
6.2.4 tig
Mac上可以使用tig代替diff和log,brew install tig
6.3 Git 本地分支管理
6.3.1 查看、切换、创建和删除分支
git br -r # 查看远程分支
git br <new_branch> # 创建新的分支
git br -v # 查看各个分支最后提交信息
git br --merged # 查看已经被合并到当前分支的分支
git br --no-merged # 查看尚未被合并到当前分支的分支
git co <branch> # 切换到某个分支
git co -b <new_branch> # 创建新的分支,并且切换过去
git co -b <new_branch> <branch> # 基于branch创建新的new_branch
git co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
git co $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支
git br -d <branch> # 删除某个分支
git br -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
6.3.2 分支合并和rebase
git merge <branch> # 将branch分支合并到当前分支
git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交
git rebase master <branch> # 将master rebase到branch,相当于:
git co <branch> && git rebase master && git co master && git merge <branch>
6.4 Git补丁管理(方便在多台机器上开发同步时用)
git diff > ../sync.patch # 生成补丁
git apply ../sync.patch # 打补丁
git apply --check ../sync.patch # 测试补丁能否成功
6.5 Git暂存管理
git stash # 暂存
git stash list # 列所有stash
git stash apply # 恢复暂存的内容
git stash drop # 删除暂存区
6.6 Git远程分支管理
git pull # 抓取远程仓库所有分支更新并合并到本地
git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并
git fetch origin # 抓取远程仓库更新
git merge origin/master # 将远程主分支合并到本地当前分支
git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支
git co -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支
git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
git push origin <local_branch> # 创建远程分支, origin是远程仓库名
git push origin <local_branch>:<remote_branch> # 创建远程分支
git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支
6.7 Git远程仓库管理
git remote -v # 查看远程服务器地址和仓库名称
git remote show origin # 查看远程服务器仓库状态
git remote add origin git@github:robbin/robbin_site.git # 添加远程仓库地址
git remote set-url origin git@:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址)
git remote rm <repository> # 删除远程仓库
6.7.1 创建远程仓库
git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库
scp -r my_project.git git@:~ # 将纯仓库上传到服务器上
mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库
git remote add origin git@:robbin/robbin_site.git # 设置远程仓库地址
git push -u origin master # 客户端首次提交
git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且track
git remote set-head origin master # 设置远程仓库的HEAD指向master分支
也可以命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop
7. 彻底解决Git中文乱码问题
现在随着Githut和SNS的流行,Social Code也像Facebook在世界中流行一样,在程序猿中流行开来。而且有犹如星星之火,在程序猿中燎原开来。有Linus这样的大牛作为发明人,有Linux Kernel这样的庞大应用作为“小白鼠”做测试,再有Github这样开放的网络交流平台,Git想不火都难。所以,今天D瓜哥也赶赶时髦,玩转一下Git,这个版本管理工具。
Git,这个版本管理工具是美国发明的,所以对中文的原生支持性不是很好。在使用时,主要会遇到三个场景对中文的支持性比较差,严重影响用户体验。下面,D瓜哥就针对这三个使用场景进行分别的描述。另外,特别说明一下,我平时工作、学习最主要的系统是Windows 7。Git使用的是msysgit。所以,以下的解决方案是针对Windows系统的解决方案。
7.1.1.1 一、ls -l 显示文件列表
想想刚玩Git那会,下个msysgit,瞬间装好,信心爆棚,无视GUI(我比较喜欢Linux以及命令行),cd到某个目录下,ls查看文件,傻眼了。MD,竟然都是乱码,着实无语加郁闷了一把!这是该怎么办呢?
其实,很简单。只需要修改一下配置信息就能解决问题。这里先做个假设,假设你Git的安装目录是%GIT_HOME%。修改步骤如下:
使用文本编辑器打开文件%GIT_HOME%\etc\gitconfig,将下面显示的三个选项的字符集修改成如下:
1
[gui]
2
encoding = utf-8
3
[i18n]
4
commitencoding = gbk
5
[svn]
6
pathnameencoding = gbk
通过这里的设置,打开Git环境中的中文支持。另外,需要特意说明一下,虽然pathnameencoding设置了文件路径的中文支持,但是为了防止不必要的麻烦出现,同时也为了提高在Bash中快速的进入某个路径,推荐使用英文路径,不要使用中文路径。
然后,使用文本编辑器打开文件%GIT_HOME%\etc\git-completion.bash,然后再其中添加如下内容:
1
alias ls='ls --show-control-chars --color=auto'
我个人比较喜欢列表显示文件,但是msysgit安装后,不支持ll。所以,就自己手动添加上支持。在上面那行配置的下面,添加下面这行配置:
1
alias ll='ls -l'
玩Linux的人,应该都能看出来,其实这只是Linux命令中,给命令起了一个别名而已。
最后,使用文本编辑器打开文件%GIT_HOME%\etc\profile,将下面的这个配置的字符集设置成如下:
1
export LESSCHARSET=utf-8 #或gbk
到这里,就大功告成了。你在Bash中,试一下,ls或者ll,是不是看到了久违的中文呢?
7.1.1.2 二、提交中文Commit Log
既然使用Git,那么肯定是要文件修改后,肯定是要提交的。但是,刚刚安装好后msysgit对Commit Log的中文支持是在是忍无可忍。没办法,这时还是要“自己动手,丰衣足食”啊。
其实,msysgit对中文Commit Log主要是因为默认的编辑器vi对中文的支持不好。所以,把默认编辑器修改成一个对中文支持比较好的编辑器即可。对于编辑器,我比较喜欢vim(在Windows下就是gVim),下面就把默认编辑器修改成gVim。步骤如下:
1. 打开目录GIT_HOME%\bin\;
2. 找到vi或者vim文件(注意:没有后缀。),复制一份出来命名gvim;
3. ,使用文本编辑器打开gvim,把里面的exec /share/vim/vim73/gvim 改成自己的Gvim目录,D瓜哥的是exec /C/Vim/vim73/gvim
4. 运行msysgit Bash,执行命令git config –global core.editor gvim
到这里,把默认编辑器已经修改成了gVim。另外,还需要修改一下msysgit的配置项。使用文本编辑器打开文件%GIT_HOME%\etc\inputrc,修改下面两个配置项如下:
1
set output-meta on
2
set convert-meta off
我第一次在修改完这些配置后,提交修改中还是不能很好的支持地支持中文。后来发现,主要是使用方法不对。这里,给大家提个醒,提交时应该使用如下指令:
1
git commit -a
注意,不要加-m的参数。否则就不能使用gVim了,也就不能支持中文了。
7.1.1.3 三、提交文件名为中文的文件
其实,D瓜哥也不知道如何修改才能很好的支持中文。不过
展开阅读全文