git是一个开源分布式版本控制系统:
客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
git优点:
速度快、设计简单、对非线性开发模式的强力支持(允许上千个并行开发的分支)、完全分布式、有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)。
Git 和其他版本控制系统的主要差别:
Git只关心文件数据的整体是否发生变化,每次计算整体数据的SHA1值是否有变化,再来确定整体状态有无更新变化。而大多数其他系统则只关心文件内容的具体差异(CVS,Subversion,Perforce,Bazaar 等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容。
|
git clone [email protected]:openstack/horizon-2014-1-1.git
git clone [email protected]:openstack/nova-2014-1-1.git
git clone [email protected]:openstack/python-novaclient-2-17-0.git
git clone [email protected]:openstack/keystone-2014-2-b1.git
git clone [email protected]:openstack/python-keystoneclient-0-9-0.git
git clone [email protected]:openstack/ceilometer-2014-1-1.git
git clone [email protected]:openstack/python-neutronclient-2-3-4.git
git clone [email protected]:openstack/python-glanceclient-0-12-0.git
git clone [email protected]:openstack/neutron-2014-1-1.git
git clone [email protected]:openstack/glance-2014-2-b1.git
git clone [email protected]:openstack/unitelog.git
|
git clone -b dev [email protected]:/var/opt/gitlab/git-data/repositories/openstack/nova-2014-1-1.git nova-2014-1-1-dev
|
1、将nova代码clone到本地:
git clone [email protected]:openstack/nova-2014-1-1.git
2、进入nova文件夹,新建分支:
cd nova-2014-1-1
git branch dev (默认此dev父分支为当前分支)
从某个tag处创建分支:
git branch <branch_name> <tag_name>
3、 查看所有分支,检测分支是否创建成功
git branch -a
4、将本地新建的分支push到远端代码库:
git push origin dev
5、如果需要clone 开发分支代码,使用如下命令:
git clone -b dev [email protected]:openstack/nova-2014-1-1.git
6、开发分支提交代码,使用如下命令:
git add .
git commit -m "test commit"
git push origin dev
备注,以后所有的代码开发都只能在dev分支上面,master只能保存发布版本合并代码
|
删除本地分支:
git branch -d you_branch_name(强制删除用-D)
删除远程分支:
git push origin :you_branch_name
举例删除nova 远程的dev分支
|
|
git reset --hard <initial_commit SHA1 值> |
|
首先用git log -2得到commit 的SHA1值
然后git tag v-test-after-tag 4640383fde2566fcbf04e6e64acc6bd68af01e8c
|
-a参数可以查看远程分支,当前分支前面加有*号标记,远程分支会用红色表示出来(如果你开了颜色支持的话):
|
在Git v1.7.0 之后,可以使用这种语法删除远程分支:
删除tag这么用:
这是删除tag的方法,推送一个空tag到远程tag:
两种语法作用完全相同。 |
git commit --amend |
git reset HEAD <file-name> |
git checkout -- <file> |
git remote -v
至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库
|
$ git remote (查看) origin (显示只有一个origin分支) $ git remote add pb git://github.com/paulboone/ticgit.git (添加一个远程分支pb) $ git remote -v (再次查看) origin git://github.com/schacon/ticgit.git pb git://github.com/paulboone/ticgit.git 现在可以用字串 pb 指代对应的仓库地址了。比如说,要抓取所有 pb有的,但本地仓库没有的信息,可以运行 git fetch pb: $ git fetch pb remote: Counting objects: 58, done. remote: Compressing objects: 100% (41/41), done. remote: Total 44 (delta 24), reused 1 (delta 0) Unpacking objects: 100% (44/44), done. From git://github.com/paulboone/ticgit * [new branch] master -> pb/master * [new branch] ticgit -> pb/ticgit
fetch 、pull区别:
|
git remote rename pb paul git remote rm paul |
git push [remote-name] [branch-name]
也可以:git push [远程名] [本地分支]:[远程分支](显式指定本地分支)
|
git checkout master
git merge dev
假若合并有冲突则用git status查看冲突文件,
手动解决完冲突之后,使用git add 则将冲突文件标注为已解决冲突,
并加入到暂存目录中等待commit
git branch --merged //查看哪些分支已经与当前分支合并了
git branch --no-merged //查看哪些分支还没有与当前分支合并了 |
|
git archive -o last.zip HEAD 基于最新提交建立归档文件last.zip |
git log master..dev |
本地回滚:
远程回滚:(原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支)
|
git reflog
|
$git config --global core.autocrlf true # Configure Git on Windows to properly handle line endings解释:core.autocrlf是git中负责处理line endings的变量,可以设置三个值--true,inout,false.
设置成三个值会有什么效果呢?
If core.autocrlf
is set to true, that means that any time you add a file to the git repo that git thinks is a text file, it will turn all CRLF line endings to just LF before it stores it in the commit.。
设置为true,添加文件到git仓库时,git将其视为文本文件。他将把crlf变成lf。【2】
If core.autocrlf
is set to false, no line-ending conversion is ever performed, so text files are checked in as-is. This usually works ok。【2】
设置为false时,line-endings将不做转换操作。文本文件保持原来的样子。
设置为input时,添加文件git仓库石,git把crlf编程lf。当有人Check代码时还是lf方式。因此在window操作系统下,不要使用这个设置。
这是参考文献2给的解释希望能帮助大家。
Yet another way to show how autocrlf
works
1) true: x -> LF -> CRLF
2) input: x -> LF -> LF
3) false: x -> x -> x
where x is either CRLF (windows-style) or LF (unix-style) and arrows stand for
file to commit -> repository -> checked out file
git config --global user.name "tantexian" git config --global user.email "[email protected]"
Create Repository
mkdir test cd test git init touch README git add README git commit -m 'first commit' git remote add origin [email protected]:tantexian/test.git git push -u origin master
Existing Git Repo?
cd existing_git_repo git remote add origin [email protected]:tantexian/test.git git push -u origin master