git学习笔记
一、简介
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目版本管理。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。
二、安装步骤
1. Git服务器
1) 搭建Git服务器
2. 客户端
Windows平台安装
Linux平台安装
#安装依赖库 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel tar -zxvf git-1.8.5.tar.gz ./configure make make install
三、配置步骤
1、安装git,从程序目录打开 "Git Bash" 2、键入命令:ssh-keygen -t rsa -C email@email.com" (注:email@email.com是github账号) 3、提醒你输入key的名称,输入:id_rsa 4、 在目录:C:\Users\用户目录\,会产生两个文件:id_rsa和id_rsa.pub 5.、把文件:id_rsa和id_rsa.pub,复制到目录:C:\Users\用户目录\.ssh\ (注:若没有目录:.ssh,则需新建该目录) 6、用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚才复制的内容。 7、配置完成
四、常用基本操作
1、账号配置相关
git config --global user.name "username" git config --global user.email username.me@gmail.com git config --global core.editor vim git config -l
2、创建本地代码库
作为例子,我们会假装我们有一个网站(无所谓技术)存在于我们机器上的‘workspace’文件夹下的’my_site’文件夹内。在命令行中,去到你的站点的根文件夹。
Linux上:
cd ~/workspace/my_site/
我们首先需要告诉Git这个文件夹是我们需要跟踪的项目。所以我们发送这个命令来初始化一个新的本地Git代码库
git init
Git会在my_site文件夹内创建一个名为.git的隐藏文件夹,那就是你的本地代码库。
3、加载文件
我们现在需要命令Git我们需要加载(stage)所有项目文件。发送:
git add .
最后的“.”符号的意思是“所有文件、文件夹和子文件夹”。假如我们只想要把特定文件添加到源代码控制中去,我们可以指定它们:
git add my_file, my_other_file
4、提交
现在,我们想要提交已加载(staged)的文件。阅读“添加一个时间点,在这里你的文件处在一个可还原的状态”。我们提交我们的文件时,总是附带着有意义的注释,描述了它们现在的状态。用“my first commit”来作为第一个提交的注释。
git commit -m "my first commit"
就这样。现在你随时都可以回滚到这个提交状态。如果你有需要检查你现在的已加载(staged)和未加载(unstaged)文件的状态、提交等,你可以询问git的状态
git status
5、创建分支
git checkout -b new_feature
或者,你可以先创建一个分支然后手动切换,就像这样:
git branch new_feature
git checkout new_feature
要看你现在项目下所有的分支,发送这个:
git branch
6、合并分支
当你对你的新功能满意了的时候,你想要把它加到主干分支上。当你在你的新功能分支上时,你首先需要加载(stage)并且提交你的文件:
git add . git commit -m "adds my new feature"
然后你移到你的主干分支:
git checkout master
最后合并
git merge new_feature
7、删除分支
如果你要把你的分支合并到主干分支,从主干(master)分支上发送:
git branch -d new_feature
此时假如修改已经合并了,它只会删除分支。假如分支没有合并,你会得到一个错误信息。删除一个未合并的分支(通常你不想保留的修改),你需要发送一样的命令附带一个大写D。意思是“强制删除分支,无论如何我不想要它了。”
git branch -D new_feature
8、回滚
在某些时候,你可能想要回到之前的代码版本。首先,你需要找到你想回到哪个版本。要看所有的完成了的提交,发送:
git log
这会输出你的提交的历史记录,像这样:
commit ca82a6dff817ec66f44342007202690a93763949Author: your_username your_email@domain.comDate: Mon Nov 4 12:52:11 2013 -0700 changes the frontpage layout commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: your_username your_email@domain.comDate: Mon Nov 4 11:40:33 2013 -0700 adds my new feature commit a11bef06a3f659402fe7563abf99ad00de2209e6Author: your_username your_email@domain.comDate: Mon Nov 4 10:37:28 2013 -0700 initial commit
如果你想回到“adds my new feature”这个提交,简单地用提交的ID做签出(checkout)(我通常只用到ID开头的9个字符)
git checkout 085bb3bcb
你也可以用以前的历史记录生成一个新的分支,像这样:
git checkout -b my_previous_version 085bb3bcb
9、推送到远程代码库github
在第一次你想推送一个本地代码库到远程代码库时,你需要把它添加到你的项目配置里。像这样做:
git remote add origin https://your_username@github.com/your_username/name_of_remote_repository.git
git push origin master
10、取得远程代码库的一份拷贝
如果你还没有一份远程代码库的本地版本(例如,如果你在另一台机器上开始工作,这台机器上还没有用过这个项目),你首先需要拷贝(clone)它。去到你的代码库想要拷贝到的文件夹下,并发送:
git clone https://your_username@github.com/your_username/name_of_remote_repository.git
另一方面,如果你已经在本地的项目上工作了,只是想从远程代码库上取得它最新的版本,移动到项目的根目录下,并发送:
git pull origin master
11、别名
Git允许你为你常用的命令创建快捷方式(别名)。例如,如果你不想每次都输入git commit -m “some comment”,而是输入git c “some comment”,你可以向你的git全局配置里添加一个别名来实现,像这样:
git config --global alias.c 'commit -m'
常用别名列表
git config --global alias.c 'commit -m' git config --global alias.co 'checkout' git config --global alias.cob 'checkout -b' git config --global alias.br 'branch' git config --global alias.m 'merge' git config --global alias.a 'add .' git config --global alias.s 'status' git config --global alias.dbr 'branch -d'
代码管理相关
1)基本操作
2)高级操作
3)技巧
遇到的问题
(1)
(gnome-ssh-askpass:5538): Gtk-WARNING **: cannot open display
解决方案:
unset SSH-ASKPASS
(2)
! [rejected] master -> master (non-fast-forward)
解决方案:
http://blog.csdn.net/chain2012/article/details/7476493
(3)
当遇到http not access(403)的问题
解决方法:
git remote add username@github.com/bralike/your-reposity.git 即一定要在github.com前添加你的账户名
(4)git pull更新错误
Your local changes to the following files would be overwritten by merge
error: Your local changes to the following files would be overwritten by merge:
方法1、如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
2、反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
五、扩展
1)Git大文件存储