Browsed by
Tag: svn

Git入门基础知识

Git入门基础知识

多年开发工作以来,前前后后用过很多个版本管理工具,从最早的VSS(微软的工具,现在大概没人知道这是个什么东东了),到SVN、ClearCase、mercurial(hg),现在终于要过渡到Git了。

其实我们最近这些年一直用着hg,感觉挺好的,非常满意,没有打算换其他工具。无奈BitBucket发邮件通知,明年要切换到Git(详情请点击这里),考虑到年底事可能会比较多,乘着现在还不太忙,赶紧先学习,抓紧时间迁移。

HG和Git的基本原理和操作是相通的,都是分布式的版本管理工具。具体在某些细节上,确实有些差异。比如HG的commit操作,实际上相当于Git的add+commit两步操作。Git多了本地缓冲区的概念,在branch部分,HG和Git有很大差异。Git的本地branch和远端branch可以不一致,需要建立映射关联,而HG本地branch和远端branch总是一致的。Git当然更灵活些,而从管理角度考虑,我更喜欢HG的处理方式。

HG的branch不能被删除,只能被关闭,而Git的branch可以被删除!我觉得这是两者最大的一个差异。显然,Git更鼓励频繁地操作branch。这点我更喜欢Git,实际工作中,定位问题、出临时版本,都可以应用一些临时的branch,事后删除,版本库也干净很多。

网上的学习资料很多,我觉得廖雪峰写的教程非常详细、易懂,推荐给大家,请点击此处

在windows系统中,直接下载、安装SourceTree即可,而在Debian系统中,使用以下命令直接安装Git:

sudo apt install git

SourceTree 使用方便、直观,如果平时是工作在windows系统,用这个工具就挺好。像我很大一部分时间是工作在Debian系统上,因此掌握一些Git的命令行操作就比较重要,好在不太多,并且和HG相差不大。

以下记录一些常见的操作:

全局配置

ssh-keygen -t rsa -C "git@demo.com"

BitBucket的Git支持 SSH 和 HTTPS 两种传输方式,推荐采用SSH,并且采用证书接入,这样有两点好处:(1)防止其他人登录。账号、密码鉴权方式比较容易泄密,而SSH证书在本地保存,只要别人不能轻易获取你的密钥文件,就无法从其他计算机上登录Git服务器。(2)每次登录、操作无需输入账户密码,能省点时间吧。

上述命令就是创建SSH密钥,默认在~/.ssh 目录下创建两个文件:id_rsa以及id_rsa.pub。id_rsa.pub中记录公钥,将其内容拷贝出来,保存在BitBucket账户中即可。

git config --global user.name "git"
git config --global user.email "git@demo.com"

配置全局用户名。这个不是Git账号的登录名,只是在每次提交代码时,系统用这些参数做一些描述性信息,比如显示改动的用户是谁,诸如此类。

git config --global color.ui true

Git命令行采用彩色显示(无关紧要,只是个人的恶趣味)。

基本命令

git add xxx 将修改提交到缓冲区
git commit -m "1234"  将缓冲区提交到本地库
git restore <filename> 放弃本地的修改
git checkout -b xxx 创建本地分支xxx
git push --set-upstream origin xxx 将本地xxx分支推送到远程仓库
git checkout -b xxx --track origin/xxx 创建本地xxx分支,并关联到远程origin/xxx分支
git checkout xxx 切换到xxx分支

Branch相关命令

git branch 查询当前本地分支
git branch -a 查询所有本地和远端分支
git branch -r 查询远端分支
git merge xxx 将分支xxx合并到当前分支 
git branch -d xxx 删除本地分支xxx
git push origin -d xxx 删除远程分支xxx (注意:分支名不要带上 origin)
git remote prune origin 删除远程分支后,更新本地的远程信息
git pull 从远程仓库更新到本地仓库
git fetch --all 更新所有分支
git pull --all 拉取所有分支
git remote show origin 检查远程分支与本地分支的关系

Tag相关命令

git tag 查询所有的标签
git tag ttt 打一个标签ttt
git tag -a ttt -m "xxx" 打标签ttt,说明文字xxx
git show ttt 查看tag及其说明文字
git push origin ttt 推送标签到远程仓库
git push origin --tags 推送所有本地标签到远程仓库
git checkout tag_name 获取tag标签对应的代码(只是快照,无法更改)
git checkout -b branch_name tag_name 在tag基础上创建分支(可以进行修改)
git tag -d ttt 删除本地标签ttt (尚未推送到远程)
git push origin :refs/tags/ttt (删除远程库中的ttt标签)
Mercurial的分支操作

Mercurial的分支操作

subversion是个很不错的集中式版本管理工具,我们一直在使用。可是缺乏分支功能的确也感觉十分不方便,尤其是我们的版本区分LTS、Stable以及Dev等各种情况时尤其如此。

Git据说是个很不错的分布式管理工具,不过感觉和svn差别太大,十分不适应。因此选择了mercurial,各项操作类似于svn,同时也具备brach等分布式版本管理的特点。

在mercurial中使用branch开发非常方便,下面是几条简单的命令:

$hg branch mss_lts <--创建mss_lts分支
$hg commit
$hg push --new-branch  <-- 提交新branch到库中
$hg branches <-- 查看分支
$hg update default <-- 切换回主分支
$hg merge mss_lts <--将mss_lts分支的修改merge回主分支
删除所有.svn目录

删除所有.svn目录

SVN的缺点就是:在每个目录下都创建了一个.svn目录。这些.svn目录就像狗皮膏药一样无处不在。在开发环境中没有问题,在生产环境中不应当出现。

在linux中可以使用下面的命令删除当前目录以及子目录下所有的.svn目录:

find . -name ".svn" -d -print -exec rm -rf {} \;
RapidSVN: Working copy locked

RapidSVN: Working copy locked

昨天Commit代码时,网络意外中断。今天再次Commit时,RapidSVN提示出错:

Error: Error while performing action: Working copy ‘… …’ locked.

看这描述的意思,是本地文件在上次操作时进行了锁定,由于没有正常退出解锁,导致后续操作无法再继续。

要解决也很容易,将上次的操作clean掉即可,点击菜单 Extras -> Cleanup,清理完成后,重新Commit即可成功。

在Ubuntu中搭建Apache2+Subversion环境

在Ubuntu中搭建Apache2+Subversion环境

以下各项操作基于Ubuntu10.10 desktop版本,其他版本估计也是类似,差别不大。

1、安装软件
安装apache2: sudo apt-get install apache2
(Ubuntu安装完上述软件后,会自动启动web服务,我们可以通过浏览器访问http://localhost。如果一切正常的话,应该能看到一个非常简陋的html页面)
安装subversion: sudo apt-get install subversion
安装apache的svn模块: sudo apt-get install libapache2-svn

2、创建subversion库

创建目录 sudo mkdir -p /var/local/svn/repos

创建subversion库 sudo svnadmin create /var/local/svn/repos

将所有权授予Apache(www-data) sudo chown -R www-data:www-data /var/local/svn/repos

3、配置Apache2(使用基本的用户名和密码验证方式)

修改/etc/apache2/mods-available/dav_svn.conf,完成后的文件如下:

<Location /mss_svn>

DAV svn

SVNPath /var/local/svn/repos

AuthType Basic

AuthName “Subversion Repository”

AuthUserFile /etc/subversion/passwd

Require valid-user

</Location>

创建用户及密码: sudo htpasswd -c /etc/subversion/passwd yxh

此时系统会提示输入用户yxh的密码。用户名和密码保存在上述passwd文件中。

4、启动Apache2,使上述配置生效

sudo service apache2 stop

sudo service apache2 start

5、打开浏览器访问:http://localhost/mss_svn,输入用户名和密码就可以浏览svn库了。

平时使用TortoiseSVN时,也是使用http://localhost/mss_svn就可以对库进行操作了,当然,也需要输入用户名和密码。

(上述localhost也可以换成ip地址或者其他能访问的域名)