分布式版本控制系统,C语言开发
所有的版本控制系统,只能跟踪文本文件的活动,版本控制系统可以告诉你它每次的改动;而无法跟踪二进制文件1
Linux、Unix、Windows、Mac
ebian或Ubuntu Linux,通过sudo apt-get install gita 安装
安装完成后,设置姓名与邮箱: $ git config --global user.name "name" $ gitconfig --global user.email "email" 参数--global : 表示这台计算机上所有的Git仓库都会使用这个配置
git init .git的目录是Git来跟踪管理版本库的
当文件保存后才能进行操作
改乱文件内容,但还未添加至暂存区时,用git checkout -- file。改乱文件内容,且添加至暂存区时,用git reset HEAD file回到步骤1,然后按步骤1执行。已经将文件提交到了版本库中,在未远程推送之前,可以先进行版本回退。删除文件rm file后,工作区和版本区会不一致,有两种选择
从版本库中删除:git rm并且git commit恢复到最新版本:git checkout -- file(是用版本库里的版本替换工作区的版本)在GitHub上创建一个库
关联一个远程库,用命令 git remote add origin git@github.com:oouapatia/learngit.git 如果关联错误,用git remote rm origin清除。关联后,第一次用git push -u origin master推送master分支所有内容。用git push origin master推送最新的修改。用git clone git@github.com:oouapatia/gitskills.git克隆 Git支持多种协议,https,但通过ssh支持的原生git更快
master分支,HEAD指向master,master指向提交,so,HEAD指向的就是当前分支
创建分支:增加一个dev指针,改变HEAD指向(改变后,对工作区的修改和提交就是对dev分支,而master分支不变) git checkout -b dev ( git checkout加上-b表示创建并切换)相当于以下两条分支: git branch dev创建分支 git checkout dev切换分支
git branch列出所有分支,并且在当前分支前会有一个* 2. 合并分支:把master指向的dev的当前提交 git merge name 命令用于合并指定分支到当前分支 3. 删除分支 git branch -d dev
一个分支与另一个分支内容不同时,进行合并会出现冲突。 Git的用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
Git无法合并分支时,需要手动解决冲突,然后在提交 用git log --graph 查看分支合并历史 提交后已经是合并后的结果,不需要再进行合并,直接删除分支即可合并分支时,通常情况下,Git会用Fast forward 模式,但删除分支后,会丢掉分支信息。 强制禁用Fast forward 模式,Git会在merge时生成一个新的commit,这样可以在分支历史上看出分支信息 git merge --no-ff -m "" branch_name (--no-ff参数表示禁用Fastforward,-m参数把commit描述进去) git log --graph --pretty=oneline --abbrev-commit查看分支历史 合并分支时
加上--no-ff参数就可以用普通模式合并,会记录合并历史而fast forward合并没有合并历史记录.首先确定在哪个分支上修复bug,在此分支上创建新的bug分支来修复,修复完成,然后合并,最后删除临时分支
创建临时分支之前需要查看工作区是否干净,干净则创建分支来修复bug当工作未完成时,需先将工作现场git stash一下,然后修复bug,再git stash pop,回到工作现场 git stash 功能:把当前工作储存起来,在恢复现场后继续工作 git stash list查看stash记录 git stash pop ,恢复的同时将stash内容删除 git stash apply 恢复,但并未删除stash内容,需要用git stash drop每添加一个新功能,最好新建一个feature分支
新建feature分支(git checkout -b feature)在上面开发,完成后,合并(git checkout dev)最后,删除该feature分支。 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。要查看远程库的信息,用git remote,或者用git remote -v显示更详细的信息
推送分支 git push origin branch-name master分支是主分支,需要时刻与远程同步dev分支是开发分支,也需要与远程同步bug分支只用于在本地修复bug,不用推到远程feature分支是否推到,取决于是否在上面合作合作开发 抓取分支 1、用git pull把最新的提交从远程仓库抓下来2、在本地合并,解决冲突,再推送3、git pull失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接 git branch --set-upstream-to=origin/dev dev4、合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突一样 多人协作的工作模式: 用git push origin <branch-name>推送自己的修改;如果推送失败,则因为远程分支比你的本地更新,需要先用git pull合并;如果合并有冲突,则解决冲突,并在本地提交;没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送。 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;在Git工作区的根目录下创建一个特殊的.gitignore文件,把需要忽略的文件名加入,将.gitignore提交到Git 配置文件:https://github.com/github/gitignore 忽略文件的原则:
忽略操作系统自动生成的文件,比如缩略图等;忽略编译生成的中间文件、可执行文件等,比如Java编译产生的.class文件;忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。配置
git config --global alias.co checkout //checkout git config --global alias.ci commit //commit git config --global alias.br branch //branch git config --global alias.unstage 'reset HEAD' //把暂存区的修改撤销掉 git config --global alias.last 'log -1' //显示最后一次提交信息–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。 每个仓库的Git配置文件放在.git/config文件中 当前用户的Git配置文件放在用户主目录下的.gitconfig文件夹中: **删除** 别名就在[alias]`后面,要删除别名,直接把对应的行删掉即可
运行Linux的机器
安装git: sudo apt-get install git 创建一个git用户,用来运行git服务: sudo adduser git 创建证书登录: 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。初始化Git仓库: 先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令: sudo git init --bare sample.gitGit就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:
sudo chown -R git:git sample.git 禁用shell登录: 出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。 6.克隆远程仓库: 现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
git clone git@server:/srv/sample.gitGit跟踪并管理的是修改
图片、视频、word文件等 ↩︎
版本库(仓库),repository,里面的所有文件都可以被Git管理,每个文件的修改,删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来的某个时刻可以“还原”。 ↩︎
把本地未push分支的提交历史整理成直线 git rebase改变本地的提交位置 ↩︎
免费托管开源代码的远程仓库 ↩︎
国内的Git托管服务 关联码云远程库与GitHub一致 可以同时使用GitHub与码云,使用多个远程库时,需要用不同的名称来标识不同的远程库 ↩︎
