浅谈使用git进行版本控制

     小编在学习可视化的时候,接触到git,因此这里写一下关于GitHub的有关知识,写这个的目的仍是巩固本身的学习,一方面能够提升本身,另外一方面回头看一下,有什么更深层次的东西还能够再记录。html

     首先说一下版本控制软件,它可让咱们可以拍摄处于可行状态的项目的快照,修改项目(如实现新功能)后,若是项目不能正常运行,能够恢复到前一个可行状态。python

    经过使用版本控制,咱们能够无忧无虑的改进项目,不用担忧项目由于咱们犯错而遭到破坏,对于大型项目来讲,这显得尤其重要,可是对于小项目来讲,哪怕只包含一个文件的程序,也大有裨益。git

    GibHub的名字源于Git,Git是一个分布式版本控制系统,让程序员团队可以协做开发项目,Git帮助你们管理为项目所作的工做,避免一我的所作的修改影响其余人所作的修改。你在项目中实现一个新功能的时候,Git将跟踪你对每一个文件所作的修改。肯定代码可行后,你将提交所作的修改,而Git将记录项目最新的状态,若是你犯了错,想撤销所作的修改,可轻松的返回之前的任何可行状态。GitHub上的项目都存储在仓库中,后者包含与项目相关联的一切:代码,项目参与者的信息,问题和bug报告等程序员

   下面讲一下安装Git(小编是windows系统,就只演示windows系统的安装)github

 第一步:下载(https://git-for-windows.github.io/),下载好以下图

            

第二步:安装过程,此处省略,要想安装能够点击下面连接

 【Git的安装步骤博文http://www.cnblogs.com/wj-1314/p/7993819.htmlwindows

第三步:配置

Git跟踪谁修改了项目,哪怕参与项目开发的只有一我的。为此,Git须要知道你的用户名和电子邮件。你必须提供用户名,但可使用虚构的电子邮件地址:浏览器

git config --global  user.name "Username"
git config --global  user.email "Username@example.com"

 

         由于Git是分布式版本控制系统,因此,每一个机器都必须自报家门:你的名字和Email地址。你也许会担忧,若是有人故意冒充别人怎么办?这个没必要担忧,首先咱们相信你们都是善良无知的群众,其次,真的有冒充的也是有办法可查的。安全

        注意git config命令的--global参数,用了这个参数,表示你这台机器上全部的Git仓库都会使用这个配置,固然也能够对某个仓库指定不一样的用户名和Email地址。架构

第四步:建立项目

咱们来建立一个要进行版本控制的项目(又称版本库)。在你的系统建立一个文件夹,并将其命名为learngit。编辑器

我建立learngit的程序以下:

mkdir  learngit   #建立文件learngit
cd learngit #进入learngit文件里面
pwd #显示learngit的存在目录

我建立了一个hello.world.py程序,以下:

print("hello world")

第五步:忽略文件

忽略扩展名为.pyc的文件,它是根据.py文件自动生成啊,咱们无需让Git去跟踪。这些文件存储在目录__pycache__中,将来让git忽略它,咱们建立一个名为.gitignore的特殊文件,(这个文件是以局点打头,没有扩展名,而且让在其中添加下面一行内容)

_pycache_/

 

第六步:初始化仓库

咱们建立了一个文件,并经过git init命令把这个目录变成Git能够管理的仓库:

$ git init
Initialized empty Git repository in C:/Users/learngit/.git/

         瞬间Git就把仓库建好了,并且告诉你是一个空的仓库(empty Git repository),细心的读者能够发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,否则改乱了,就把Git仓库给破坏了。要是删除这个东西,则丢弃项目的全部记录。

       若是你没有看到.git目录,那是由于这个目录默认是隐藏的,用ls -ah命令就能够看见。

      也不必定必须在空目录下建立Git仓库,选择一个已经有东西的目录也是能够的。不过,不建议你使用本身正在开发的公司项目来学习Git,不然形成的一切后果概不负责。

第七步:检查状态

在执行其余操做以前,先来看一下状态:

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hello_world.py

nothing added to commit but untracked files present (use "git add" to track)

    在Git中,分支是项目的一个版本,从这里的输出咱们能够知道,咱们位于分支的,master

     咱们每次查看项目的状态时候,输出的都是咱们位于分支master上,接下里的输出代表,咱们将进行初始项目的日叫,提交是项目在特定时间的快照。

  Git指出了项目中未被跟踪的文件,由于咱们尚未告诉他要跟踪那些文件,接下里咱们被告知没有任何东西添加到当前提交里面,但咱们可能须要将为跟踪的文件加入仓库

第八步:将文件加入到仓库

$ git add .

。。。@▒▒▒▒▒ĵ▒▒▒ MINGW64 ~/learngit (master)
$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   hello_world.py

命令  git add .   将项目中未被跟踪的文件都加入到仓库中,它不提交这些文件,而只是让git开始关注他们。如今咱们检查这个项目的状态,发现Git找到了须要提交的文件的一些修改,标签 new file  表示这些文件是新加入的。

第九步:执行提交

$ git commit -m "Started project"
[master (root-commit) 5d6ceca] Started project
 1 file changed, 1 insertion(+)
 create mode 100644 hello_world.py

     咱们在执行   git commit -m "Started project"    的时候以拍摄项目的快照。标志-m 让Git接下里的消息(“Started project")记录到项目中的历史记录中,输出代表咱们在分支master 上,并且有一个文件被修改了

     简单解释一下git commit命令,-m后面输入的是本次提交的说明,能够输入任意内容,固然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

第十步:查看提交历史

$ git log
commit 5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master)
Author: username <xxxxxxxxxx.example.com>
Date:   Sat Dec 9 20:16:17 2017 +0800

    Started project

咱们每次提交的时候,Git都会生成一个包含40字符的独一无二的引用ID,它记录提交是谁执行的,提交的时间以及提交的指定消息,并不是在任何状况下你都须要全部的这些信息,所以Git提供一个选项,让咱们可以打印提交历史条目的更简单的版本。

$ git log --pretty=oneline
5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Started project

标志 --pretty=oneline   指定显示一项最重要的信息,提交的引用ID以及为提交记录的消息。

第十一步:第二次提交

为了显示版本控制的强大,咱们须要对项目进行修改,并提交所作的修改。为此,咱们在文件hello.world.py中再添加一行代码。

print("hello world")
print("hello git")

若是咱们查看项目的状态,将发现Git注意到这个文件的变化

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   hello_world.py

no changes added to commit (use "git add" and/or "git commit -a")

  这个之处了咱们当前所在的分支为master,其中作出修改的文件是hello_world.py,并且指出所作的修改尚未提交。

    接下来咱们提交所作操做,并在查看操做。

     这一步,咱们执行了提交,而且在执行命令git commit 的时候指定了标志-am.标志-a 让Git 将仓库中全部修改了的文件都加入当前提交中,(若是咱们两次提交之间加入了新文件,咱们执行get add . 操做,将新文件加入到仓库中)标志-m让Git咱提交历史中记录一条消息。

$ git commit -am "Extrended greeting."
[master b4ee15d] Extrended greeting.
 1 file changed, 2 insertions(+), 1 deletion(-)
$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline
b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting.
5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project

咱们在查看项目的状态的时候,发现工做目录也是干净的,最后咱们发现提交历史中包含两个提交。

第十二步:撤销修改

下面来看看如何放弃所作的修改,恢复到一个可行状态,为此,咱们首先在hello_world.py中添加一行代码

hello_world.py

print("hello world")
print("hello git")


print("the world is bad")

保存并运行这个文件

咱们查看状态,发现Git注意到所作的修改

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   hello_world.py

no changes added to commit (use "git add" and/or "git commit -a")

Git注意到咱们修改了hello_world.py,我么能够提交所作的修改,可是咱们不提交所作的修改,而要恢复到最后一个提交,为此咱们不对hello_world.py执行任何操做————不删除刚添加的代码行,也不使用文本编辑器的撤销功能,而是在终端会话中执行以下命令:

$ git checkout .

命令  git checkout .  可以让咱们恢复到之前的任何提交。命令git checkout . 放弃最后一次提交所作的全部操做,将项目恢复到最后一次提交的状态。

$ git status
On branch master
nothing to commit, working tree clean

    就这个项目而言,咱们恢复到前一个状态微不足道,可是若是咱们开发的是大型项目,其中数十个文件都被修改了,那么恢复到前一个状态,将撤销来自最后一次提交的对这个文件所作的全部修改,这个功能颇有用,好比:实现新功能,咱们能够根据须要作任意数量的修改,若是这些修改都不行,能够撤销他们,而不会对项目有任何伤害,你无需记住作了那些修改,于是没必要手工撤销所作的修改,Git会替咱们完成全部的工做。

第十三步:检查之前的提交

 咱们能够检查提交历史中的任何一次提交,而不只仅是最后一次,为此咱们能够在命令git check末尾指定该提交的引用ID的前6个字符(而不是局点)。经过检查出之前的提交,咱们能够对其进行审核么而后返回到最后一次提交,或者放弃最近所作的工做,并选择之前的提交。

$ git log --pretty=oneline
b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting.
5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project
$ git checkout 5d6cec
Note: checking out '5d6cec'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at 5d6ceca... Started project

     检查出之前的提交,咱们将离开分支master,并进入Git所说的Git所说的分离头指针(detached HEAD)状态,HEAD表示项目的当前状态,之因此说咱们处于分离状态是由于咱们离开了一个命名分支(这里是master)

      要回到分支master,能够检查出它:

$ git checkout master
Previous HEAD position was 5d6ceca... Started project
Switched to branch 'master'

  这就会让你回到分支master 。除非i使用Git的高级功能,不然在提交之前的项目后,最好不要对项目作任何修改,然而,若是参与项目开发的人只有咱们本身,而我本身又想放弃全部提交,并恢复到之前的状态,也能够将项目重置到之前的状态,为此,可在处于分支master上的任何状况下,执行以下命令。

$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline
b4ee15ddf5274f488db8c74c327065c6f331ec5e (HEAD -> master) Extrended greeting.
5d6cecad80427924b94b14c6fd2bb82a4fa86840 Started project
$ git reset --hard 5d6cec
HEAD is now at 5d6ceca Started project
$ git status
On branch master
nothing to commit, working tree clean
$ git log --pretty=oneline
5d6cecad80427924b94b14c6fd2bb82a4fa86840 (HEAD -> master) Started project

首先,咱们查看了状态,确认咱们在分支master上,查看历史提交时,咱们看见了两个提交。

而后,咱们执行了命令    git reset --hard    ,并在其指定了要永久性的恢复到的提交的引用ID的前6个字符。

接下来,咱们在次查看状态,大仙,咱们在分支master上,而且没有须要任何修改,

最后,咱们再次查看提交的历史状态时候,咱们发现咱们处于从新开始的提交中。

第十四步:删除仓库

  有时候,仓库的历史纪录被咱们搞乱了,而咱们又不知道如何恢复,这时候咱们首先应该考虑百度一下,看看本身的问题出在那里,若是没法恢复,并且参与项目的人只有本身,能够继续使用这些文件,但须要将这些项目的历史纪录删除——删除.git 这不会影响任何文件的当前状态,而只会删除文件的全部提交,所以咱们将没法检查出项目的其余任何状态。

   为此,能够打开一个文件浏览器,并将目录.git 删除,也能够经过命令完成这个任务。可是这样作过咱们须要建立一个新的仓库,以从新对这些修改进行跟踪。

  下面演示了如何在终端会话中完成这个过程。

$ git status
On branch master
nothing to commit, working tree clean
$ rm -rf .git
 rm -rf .git  表示删除目录.git,删除后咱们将继续查看状态。
$ git status
fatal: Not a git repository (or any of the parent directories): .git

    这个意思是被告知咱们,这不是一个仓库,(git用来跟踪仓库的信息都存储爱文件夹.git中,所以删除该文件夹也将会删除整个仓库)

接下来,咱们用命令 git init 来建立一个新的仓库,并查看状态

$ git init
Initialized empty Git repository in C:/Users//learngit/.git/
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        hello_world.py

nothing added to commit but untracked files present (use "git add" to track)

  从状态中咱们发现,又回到了初始状态,等待第一次提交,咱们下面将全部的文件都添加到仓库中,并执行第一次提交,最后检查状态,以下:

$ git add .
$ git commit -m "Starting over"
[master (root-commit) 81350ab] Starting over
 1 file changed, 1 insertion(+)
 create mode 100644 hello_world.py
$ git status
On branch master
nothing to commit, working tree clean

从检查状态咱们发现,咱们在分支master上,而且没有任何未提交的修改。

 

  这就是版本控制的基本操做,但愿能多多练习,这样咱们才能学会版本控制。

  要想好好了解GitHub的使用,请参考小编使用GitHub的点点滴滴的博客:http://www.javashuo.com/article/p-fjbqdcoi-gq.html

 

  • 推荐一个版本控制工具

  • CODING:研发管理系统:https://coding.net/ ,以 Git 代码托管与发布为核心,涵盖代码提交、代码审查、Bug 追踪等开发场景,经过任务、文件、Wiki 等工具,获取需求管理、任务追踪、知识库管理等一系列写做功能。基于 Git 的版本控制保障了公司代码资产安全,实现自动构建,减小人工干预,提高业务系统质量。

  • 系统基本架构:

 

 

  • 企业级项目工做一体化:

 

相关文章
相关标签/搜索