黑帽联盟

 找回密码
 会员注册
查看: 1127|回复: 0
打印 上一主题 下一主题

[基础服务] Git之旅(3):仓库

[复制链接]

895

主题

38

听众

3324

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情

    3 天前
  • 签到天数: 1646 天

    [LV.Master]伴坛终老

    当我们需要使用git进行版本管理时,要接触的第一个概念就是"仓库",你可以把"仓库"理解成一个目录,只有这个目录中的文件才能被git管理,换句话说就是,如果你想要对某个文件进行版本管理,你就需要把这个文件放入到一个带有git功能的目录中,这个带有git功能的目录就是所谓的git仓库,git仓库的英文为"git repository",后文中所提到"仓库"、"版本库"、"repository"、"repo"其实都是一种东西,我们会不加区分的使用这些名词,它们都表示"仓库",当你把一个文件加入到某个git仓库以后,你对这个文件的所有操作都可以被git记录,从而实现版本管理的目的。

    所以,为了使用git进行版本管理,我们首先要做的,就是创建一个git repository。

    我们可以直接创建一个空的git仓库,也可以将一个已经存在目录转化成git仓库,我们先来看看怎样创建一个全新的、空的git仓库(操作系统为win10)。

    假设,我想要在"D:\workspace\git"目录中创建一个名为git_test的版本库,该怎么办呢?
    首先,我们需要进入到"D:\workspace\git"目录中,你可以打开"Git Bash",然后输入如下命令进入目录
    $ cd /d/workspace/git
    注:在windows的git bash中,D盘对应的路径为/d/
    你也可以在windows的资源管理器中打开"D:\workspace\git"目录,然后在目录的空白处单击鼠标右键,然后单击右键菜单中的"Git Bash Here",通过这种方式打开的git bash终端默认就在对应的目录中。

    注:在后文中,我们输入的所有命令都是在git bash中执行的,如有特殊情况,则会说明,之后不再赘述。

    当进入到对应目录后,执行如下命令即可创建git_test仓库:
    $ git init git_test
    Initialized empty Git repository in D:/workspace/git/git_test/.git/
    没错,非常简单,执行完上述命令后,"D:\workspace\git"目录中会多出一个名为"git_test"的目录,这个目录就是一个git仓库,你可以将需要进行版本管理的文件放入到"git_test"目录中,从上述命令的返回值也可以看出,我们已经成功的初始化了一个空的git仓库。

    进入刚才创建的git仓库,也就是"/d/workspace/git/git_test"这个目录,你会发现一个名为".git"的隐藏目录
    $ pwd
    /d/workspace/git/git_test

    $ ls -a
    ./  ../  .git/
    这个目录非常重要,git会依靠这个目录进行版本管理的工作,git会将版本管理所需的相关信息转化成git对象存放到这个目录中,其实,这个".git"目录才是真正的git仓库,这个仓库是针对git_test目录的,我们依靠它对git_test目录中的文件和目录结构进行版本管理,".git"目录赋予了git_test目录进行版本管理的能力,我们在之后的文章中会使用到这个目录,以便更加深入的理解git的运行原理,但是,需要注意,在任何时候都不要手动的修改或删除".git"目录中的文件,因为这样会破坏仓库,仓库被破坏以后,就无法进行版本管理了。

    上述步骤描述了怎样创建一个新的、空的版本库,那么我们能不能把一个已经存在的目录变成一个git仓库呢?当然可以,而且更加简单,我们只需要进入到对应目录,然后执行"git init"命令即可,示例如下:
    假设,我想要将"/d/workspace/git/code_test"目录变成一个git仓库,只需执行如下命令
    $ cd /d/workspace/git/code_test
    $ git init
    执行完上述命令以后,code_test目录中就会多出一个".git"隐藏目录,此时,code_test目录就是一个可以利用git进行版本管理的目录了。
    无论之前code_test目录中是否包含其他文件,我们都能够使用"git init"命令将code_test目录变为一个git仓库,即使code_test目录中原来就包含其他文件,当我们执行"git init"命令以后,code_test目录中的原有文件也不会被git管理,因为如果想要管理这些文件,我们还需要一些其他操作,才能将它们纳入到git的追踪范围以内,也就是说,git init命令只是让code_test目录拥有了版本管理的能力,无论code_test目录中原来是否存在文件,".git"目录都是新创建出来的,从git仓库的角度来说,这就是一个新的仓库,还没有任何文件被这个仓库所管理。

    小结一下
    git init命令是把当前目录转化成git repo
    git init repo_name 命令是在当前目录中创建一个以repo_name命名的新目录,新目录是一个git repo

    了解了仓库的概念以后,我们再来回顾一下上一篇文章中的知识点,我们已经说过,如果想要使用git进行版本管理,必须先提供我们用户名和电子邮箱,因为这些信息需要被记录到仓库中,我们可以使用如下命令设置用户名和邮箱
    $ git config --global user.name "cnblackhat"
    $ git config --global user.email "cnblackhat@@qq.com"
    我们解释过上述两条命令的作用,但是并没有解释上述命令的"--global"选项是什么意思,现在,我们就来聊聊这个选项是什么意思。

    从字面上看,"--global"的意思是"全局的",也就是说,如果我们在设置用户名和用户邮箱的时候,使用了这个选项,那么,当前系统用户(windows系统用户)创建的所有Git仓库都会使用这个用户名和邮箱,除了"--global"选项,还有"--local"选项和"--system"选项,没错,聪明如你一定想到了,我们可以通过这三个选项控制设置作用域的范围,这三个选项的作用域如下:
    git config --system:使对应配置针对系统内所有的用户有效
    git config --global:使对应配置针对当前系统用户的所有仓库生效
    git config --local:使对应配置只针对当前仓库有效
    local选项设置的优先级最高。
    如果想要查看对应作用域的设置,可以使用如下命令
    git config --system --list
    git config --global --list
    git config --local --list
    我们在设置用户名和邮箱时,通常会使用"--global"选项,因为这样我们只需要设置一次,当前用户的所有仓库都会使用这些用户名和邮箱信息,即使是当前用户新创建的仓库,也会使用同样的配置,如果使用"--system"选项,可能会影响到系统中的其他系统用户,如果使用"--local"选项,当信息不需要变化时,每次创建新仓库时又都需要重复的为新仓库设置一次,所以,当设置用户名和邮箱时,"--global"选项最常用。



    好了,这篇文章介绍了git版本库的概念,并且回顾了之前的知识点,但是还是没有开始真正的使用git进行版本管理的工作,唉......,我都有点等着急了,争取下一篇文章中用上git吧。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    勿忘初心,方得始终!
    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部