代码协同管理工具
SVN GIT
什么是git
- git是一个开源的分布式版本控制系统,用于高效敏捷的管理大小项目代码。
git特点
- git 可以管理各种文件,特别是代码项目,多使用在*nix系统中
- 是分布式管理,不同于集中管理,这是git和svn的核心区
- 更好的分支
- 拥有全球唯一的版本号
- 代码安全性更加有保证
- 开源方便,数据传输速度更快,可以无网络操作
集中式和分布式
- 集中式:代码集中管理,需要上传到中央处理器,每次更新都从中央服务器下载
- 分布式:每个节点都保存完整的代码,没有中央处理器,节点之间相互推送下载完成戴拿共享,(git)
git的安装
- linux下
sudo apt-get install git - windows:
msysgit.github.io
git的配置
- git配置工具:git config
配置级别
- 系统中所有用户都使用
/etc/gitconfig 文件
配置姓名
git config --system user.name [your name]
git config --system user.email [yourmail]arena@tedu:~/git$ git config --system user.name kang tarena@tedu:~/git$ sudo git config --system user.email [email protected] tarena@tedu:~/git$ ls tarena@tedu:~/git$ cd /etc tarena@tedu:/etc$ ls tarena@tedu:/etc$ cat gitconfig [user] name = kang email = [email protected]
- 作用于当前用户
~/.gitconfig 文件
git config --global user.name [yourname]
e.g.
sudo git config --global user.name Levitarena@tedu:~$ cat .gitconfig [user] name = Levi
- 作用于当前项目仓库
.git/config
配置编译器
git config core.editor [youreditor]
e.g.
git config core.editor vimarena@tedu:~/git$ git init 初始化空的 Git 仓库于 /home/tarena/git/.git/ tarena@tedu:~/git$ ls tarena@tedu:~/git$ ll 总用量 12 drwxrwxr-x 3 tarena tarena 4096 8月 30 19:57 ./ drwxr-xr-x 38 tarena tarena 4096 8月 30 19:47 ../ drwxrwxr-x 7 tarena tarena 4096 8月 30 19:57 .git/ tarena@tedu:~/git$ cd .git/ tarena@tedu:~/git/.git$ ls branches config description HEAD hooks info objects refs tarena@tedu:~/git/.git$ cat config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true tarena@tedu:~/git/.git$ cd tarena@tedu:~$ cd git tarena@tedu:~/git$ git config core.editor vim tarena@tedu:~/git$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true editor = vim
- 查看配置信息
git config --listtarena@tedu:~/git$ git config user.name Jame #再添加个名字 tarena@tedu:~/git$ git config --list [email protected] user.name=Levi core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.editor=vim user.name=Jame
git 命令
- 初始化git仓库
git init - 将需要git管理的代码写在git仓库(目录)中
建立txt文档arena@tedu:~/git$ touch README.txt tarena@tedu:~/git$ git status 位于分支 master 初始提交 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容) README.txt 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
- 查看当前分支状态
git status - 默认在git的主分支master上工作
- 将文件提交到暂存区
git add file1,file2,...
- 删除暂存区中的文件
git rm --cached filearena@tedu:~/git$ git add README.txt tarena@tedu:~/git$ git status 位于分支 master 初始提交 要提交的变更: (使用 "git rm --cached <文件>..." 以取消暂存) 新文件: README.txt tarena@tedu:~/git$ git rm --cached README.txt rm 'README.txt' tarena@tedu:~/git$ ls README.txt tarena@tedu:~/git$ git status 位于分支 master 初始提交 未跟踪的文件: (使用 "git add <文件>..." 以包含要提交的内容) README.txt 提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
扫描二维码关注公众号,回复: 2969139 查看本文章 - 将暂存区内容保存提交
git commit -m 'some message'
e.g.
git commit -m 'add a file:README.txt'tarena@tedu:~/git$ git add README.txt tarena@tedu:~/git$ git commit 终止提交因为提交说明为空。 tarena@tedu:~/git$ git commit -m 'add a file:README.txt' [master (根提交) 9bec437] add a file:README.txt 1 file changed, 1 insertion(+) create mode 100644 README.txt tarena@tedu:~/git$ git status 位于分支 master 无文件要提交,干净的工作区
- 查看提交日志
git log
git log --pretty=oneline 每个之日只显示一行#在git再添加一个文件,比如httpserver.py tarena@tedu:~/git$ git add httpserver.py tarena@tedu:~/git$ git commit -m "add http server" [master 1a5a510] add http server 1 file changed, 1 insertion(+) create mode 100644 httpserver.py tarena@tedu:~/git$ git log commit 1a5a510a5387a3fadd2cd06631608bbed9ba7a65 Author: Jame <[email protected]> Date: Thu Aug 30 20:33:18 2018 +0800 add http server commit 9bec437505ba48aaae365a09b3027ce17b677181 Author: Jame <[email protected]> Date: Thu Aug 30 20:23:00 2018 +0800 add a file:README.txt
- 查看当前文件和已提交内容的差别
git diff file
e.g.
git diff README.txt - 恢复误删的文件
git checkout file
e.g.
git checkout README.txt - 文件的移动删除
git mv test/file.config .
git rm file.config
操作后需要commit操作才真正让git和当前文件夹一致 - 版本控制
回到上一个版本
git reset --hard HEAD^
回到上一个版本^ 回到上两个版本就两个^^
超过10 就HEAD~10
直接通过commid_id 前7位调到某个版本
git reset --hard 776427 - 去往较新的版本
当退回到某个版本后,比其新的版本log就无法通过git log查看,此时使用git reflog查看,然后通过
git reset --hard 去往指定版本
git reflog - 放弃工作区内容修改
git checkout -- file
e.g.
git checkout -- README.txt - 创建临时保存工作区
内容暂时保存不想提交(没有commit的情况下,如果已经commit就没有意义了) - 查看现有保存的工作区
git stash list - 恢复到某个工作区
git stash apply stash@{2} - 恢复并删除上一个工作区
git stash pop - 删除指定的工作区
git stash drop stash@{0} - 清除所有的工作区
git stash clear
分支操作
什么是分支
- 分支即每个人可以获取代码,在此基础上创建自己的分支单独开发,不用考虑别人对代码的使用情况,开发完成后再将自己的分支合并到主线中
- 好处:安全,不影响其他人工作,自己控制进度
- 查看当前分支
git branch
注意:前面有*的表示当前正在工作的分支,默认为master - 创建新的分支
git branch dev_Tom - 切换工作分支
git checkout dev_Tom - 创建并切换到新的分支
git checkout -b dev_Jame - 将某个分支合并到当前分支
git merge dev_Tom - 删除分支
git branch -d dev_Tom
强制删除
git branch -D dev_Jame - 查看操作流程
git log --graph
标签管理
- 什么是标签:即再当前工作位置增加快照,保存工作状态,一般用于重要里程碑事件后添加标签
- 在最新的commit上创建标签
git tag v1.0
选择commit_id打标签
git tag v0.9 6224637 - 查看标签
git tag - 查看标签的commit说明
git show v0.9 - 用-a指定标签名称 -m添加标签信息
git tag -a v1.1 -m 'version 1.1 released' [commit_id] - 删除一个标签
git tag -d v0.9 - 恢复到指定标签版本
git reset --hard v1.0
创建共享仓库
- 创建一个文件夹
mkdir gitrepo - 设置文件夹的用户所属
chown tarena:tarena gitrepo/ - 进入文件夹,创建为git仓库
cd gitrepo
git init --bare project.git - 一般项目名称都以.git结尾,设置该目录用户
chown -R tarena:tarena project.git
- 添加远程仓库
tarena@tedu:~/git$ git remote add origin [email protected]:/home/tarena/gitrepo/project.git - 向远程仓库推送代码
git push -u origin master
第一次推送代码时加 -u 选项
- 获取项目代码
连接远程共享仓库
git remote add origin [email protected]:/home/tarena/gitrepo/project.git - 将项目克隆到本地
git clone [email protected]:/home/tarena/gitrepo/project.git
- 其它推送命令
推送其它分支
git push origin dev_Jame
推送标签到远程仓库
git push origin --tags 推送所有标签
git push origin v1.0 推送指定标签 - 删除远程分支
git push -u origin :dev_Jame
- 删除标签
git push origin --delete tag v1.0
- 其它获取远程仓库代码命令
获取新的分支和标签
git fetch origin
获取更新的代码
git pull
github
08年上线的一个开源社区,使用git作为项目代码管理工具