广告
返回顶部
首页 > 资讯 > 精选 >Git中如何创建一个本地仓库
  • 619
分享到

Git中如何创建一个本地仓库

2023-06-16 21:06:09 619人浏览 独家记忆
摘要

这篇文章主要介绍了git中如何创建一个本地仓库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建一个新的项目目录,并生成一些简单的文件内容:$ mkdir 

这篇文章主要介绍了git中如何创建一个本地仓库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

创建一个新的项目目录,并生成一些简单的文件内容:

$ mkdir test_proj$ cd test_proj$ echo “hello,world” > readme.txt

在项目目录创建新的本地仓库,并把项目里的所有文件全部添加、提交到本地仓库中去:

$ git init #在当前的目录下创建一个新的空的本地仓库Initialized empty Git repository in /home/user/test_proj/.git/$ git add . #把前目录下的所有文件全部添加到暂存区$ git commit -m 'project init' #创建提交[master (root-commit) b36a785] project init1 files changed, 1 insertions(+), 0 deletions(-)create mode 100644 readme.txt

Git目录的结构

git init命令在项目的顶层目录中建了一个名为:“.git”的目录,它的别名是 “Git目录”(Git  directory)。这时”Git目录”中虽然有一些文件,但是没有任何提交(commit)在里面,所以我们叫它是空仓库(empty Git  repository)。

和  SVN不同,一个Git项目一般只在项目的根目录下建一个“.git”目录,而SVN则会在项目的每一个目录下建一个”.svn”目录;这也我喜欢Git的原因之一:)

Git把所有的历史提交信息全部存储在“Git目录”里,它就是一个Git项目的仓库;你对本地的源代码进行编辑修改后创建的提交也都会先保存在这里面,然后再推送到远端的服务器。当我们我把项目目录和“Git目录”一起拷到其它电脑里,它能马上正常的工作(所有的提交信息全都保存在Git目录里);甚至可以只把“Git目录”拷走也行,但是要再签出(checkout)一次。

Git为了  调试的方便,它可以指定项目的Git目录的位置。有两种办法:一是设置“GIT_DIR”环境变量,二是在命令行里设定“--git-dir--git-dir”参数指定它的位置,大家可以看一下这里(git(1)  Manual Page)。

庖丁解牛

前面的这些东东我在***篇里也大概的讲过一些,但是今天我们想不但要开动这辆叫“Git”的跑车,还想看看它里面有些什么样的零件,是怎么构成的。

OK,我们来看看“test_proj”项目里的“Git目录”的结构:

$cd test_proj/.git$ ls | morebranches/ # 新版的Git已经不再使用这个目录,所以大家看到它 #一般会是空的COMMIT_EDITMSG # 保存着上一次提交时的注释信息config # 项目的配置信息description # 项目的描述信息HEAD # 项目当前在哪个分支的信息hooks/ # 默认的“hooks” 脚本文件index # 索引文件,git add 后把要添加的项暂存到这里info/ # 里面有一个exclude文件,指定本项目要忽略的文件 #,看一下这里logs/ # 各个refs的历史信息objects/ # 这个目录非常重要,里面存储都是Git的数据对象# 包括:提交(commits), 树对象(trees),二进制对象 #(blobs),标签对象(tags)。#不明白没有关系,后面会讲的。refs/ # 标识着你的每个分支指向哪个提交(commit)。

我先用git log命令来看一下这个Git项目里有哪些提交:

$ git loGCommit 58b53cfe12a9625865159b6fcf2738b2f6774844Author: liuhui998Date: Sat Feb 19 18:10:08 2011 +0800project init

大家可以看到目前只有一个提交(commit)对象,而它的名字就是:”58b53cfe12a9625865159b6fcf2738b2f6774844”。这个名字就是对象内容的一个SHA签名串值,只要对象里面的内容不同,那么我们就可以认为对象的名字不会相同,反之也成立。我在使用时一般不用把这个40个字符输全,只要把前面的5~8个字符输完就可以(前提是和其它的对象名不冲突)。为了方便表示,在不影响表达的情况下,我会只写SHA串值的前6个字符。

我们可以用git cat-file来看一下这个提交里的内容是什么:

$ git cat-file -p 58b53ctree 2bb9f0c9dc5caa1fb10f9e0ccbb3a7003c8a0e13author liuhui998 1298110208 +0800committer liuhui998 1298110208 +0800project init

大家可以看到:提交“58b53c” 是引用一个名为“2bb9f0”的树对象(tree)。一个树对象(tree)可以引用一个或多个二进制对象(blob),  每个二进制对象都对应一个文件。 更进一步, 树对象也可以引用其他的树对象,从而构成一个目录层次结构。我们再看一下这个树对象(tree)里面有什么东东:

$ git cat-file -p 2bb9f0100644 blob 2d832d9044c698081e59c322d5a2a459da546469 readme.txt

不难看出,2bb9f0”这个树对象(tree)包括了了一个二进制对象(blob),对应于我们在前面创建的那个叫  ”readme.txt”的文件。现在我们来看看这个”blob”里的数据是不是和前面的提交的内容一致:

$ git cat-file -p 2d832dhello,world

哈哈,熟悉的“hello,world”又回来了。

想不想看看提交对象、树对象和二进制对象是怎么在”Git目录“中存储的;没有问题,执行下面的命令,看看”.git/objects”目录里的内容:

$ find .git/objects.git/objects.git/objects/2b.git/objects/2b/b9f0c9dc5caa1fb10f9e0ccbb3a7003c8a0e13.git/objects/2d.git/objects/2d/832d9044c698081e59c322d5a2a459da546469.git/objects/58.git/objects/58/b53cfe12a9625865159b6fcf2738b2f6774844.git/objects/info.git/objects/pack

如果大家仔细看上面命令执行结果中的粗体字,所有的对象都使用SHA签名串值作为索引存储在”.git/objects”目录之下;SHA串的前两个字符作为目录名,后面的38个字符作为文件名。

这些文件的内容其实是压缩的数据外加一个标注类型和长度的头。类型可以是提交对象(commit)、二进制对象(blob)、  树对象(tree)或者标签对象(tag)。

如何clone一个远程项目

我身边的很多朋友是因为要得到某个开源项目的代码,所以才开始学习使用Git。而获取一个项目的代码的一般的做法就是用git  clone命令进行直接复制。

例如,有些朋友可能想看一下***的linux内核源代码,当我们打开它的网站时,发现有如下面的一段提示:

URLgit://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitHttp://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.githttps://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

URL下面的三行字符串表示三个地址,我们可以通过这三个地址得到同样的一份Linux内核源代码。

也就是说下面这三条命令最终得到的是同一份源代码:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitgit clone http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitgit cone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

我们先来看一下URL,git://、http://、https://这些代表是传输git仓库的协议形式,而“git.kernel.org“则代表了Git仓库存储的服务器名字(域名),“/pub/scm/linux/kernel/git/torvalds/linux-2.6.git”  则代表了Git仓库在服务器上位置。

Git 仓库除了可以通过上面的git、http、https协议传输外还可以通过ssh、ftp(s)、rsync等协议来传输。git  clone的本质就是把“Git目录”里面的内容拷贝过来,大家想想看,一般的“Git目录”里有成千上万的各种对象(提交对象,树对象,二进制对象......),如果逐一复制的话,其效率就可想而知。

如果通过git、ssh协议传输,服务器端会在传输前把需要传输的各种对象先打好包再进行传输;而http(s)协议则会反复请求要传输的不同对象。如果仓库里面的提交不多的话,前者和后者的效率相差不多;但是若仓库里有很多提交的话,git、ssh协议进行传输则会更有效率。

不过现在Git对http(s)协议传输Git仓库做了一定的优化,http(s)传输现在也能达到ssh协议的效率,有兴趣的朋友可以看一下这里(Smart  HTTP Transport)。

好的,现在我们执行了下面这条命令,把linux-2.6的***版源代码clone下来:

$cd ~/$mkdir temp$git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitInitialized empty Git repository in /home/liuhui/temp/linux-2.6/.git/remote: Counting objects: 1889189, done.remote: Compressing objects: 100% (303141/303141), done.Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.remote: Total 1889189 (delta 1570491), reused 1887756 (delta 1569178)Resolving deltas: 100% (1570491/1570491), done.Checking out files: 100% (35867/35867), done.

当我们执行了“git clone  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git”这条命令后大家可以看到这条输出:

Initialized empty Git repository in /home/user/temp/linux-2.6/.git/

这就是意味着我们在本地先建了一个“linux-2.6”目录,然后在这个目录建了一个空的Git本地仓库(Git目录);里面将会存储从网上拉下来的历史提交。

下面两条输入代表服务器现在调用 git-pack-objects 对它的仓库进行打包和压缩:

remote: Counting objects: 1888686, done.remote: Compressing objects: 100% (302932/302932), done.

然后客户端接收服务器端发过送过来的数据:

Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.

在我们执行完上面的clone  linux-2.6代码的的操作后,Git会从“Git目录”里把***的代码到签出(checkout)到“linux-2.6”这个目录里面。我们一般把本地的“linux-2.6”这个目录叫做”工作目录“(work  directory),它里面保存着你从其它地方clone(or  checkout)过来的代码。当你在项目的不同分支间切换时,“工作目录”中的文件可能会被替换或者删除;“工作目录”只是保存着当前的工作,你可以修改里面文件的内容直到下次提交为止。

感谢你能够认真阅读完这篇文章,希望小编分享的“Git中如何创建一个本地仓库”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Git中如何创建一个本地仓库

本文链接: https://www.lsjlt.com/news/285283.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Git中如何创建一个本地仓库
    这篇文章主要介绍了Git中如何创建一个本地仓库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。创建一个新的项目目录,并生成一些简单的文件内容:$ mkdir ...
    99+
    2023-06-16
  • git怎么创建本地仓库
    Git 是一个分布式版本控制系统,可以非常方便地进行代码的版本控制和管理。在 Git 中,可以通过建立仓库来管理代码。本文将详细介绍,如何在本地创建一个 Git 仓库,以便于进行本地代码管理和版本控制。第一步:安装 Git在创建本地仓库之前...
    99+
    2023-10-22
  • 如何在Gitee上创建一个新的Git仓库
    在进行软件项目开发的过程中,版本控制和代码管理是非常重要的一环。近年来,Git 工具通过其高效的分布式架构和出色的管理功能,成为了最受欢迎的版本控制工具之一。而 Gitee(码云)是一个非常受欢迎的国内 Git 托管服务,提供了稳定的基础设...
    99+
    2023-10-22
  • git创建本地仓库的方法是什么
    要创建一个本地仓库,可以按照以下步骤使用Git命令行工具: 打开命令行终端(Command Prompt,Terminal等)。 ...
    99+
    2023-10-20
    git
  • 如何删除Git本地仓库
    本篇内容介绍了“如何删除Git本地仓库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!当我们在本地删除 Gi...
    99+
    2022-10-19
  • 如何在Git中删除本地仓库
    【前言】Git是一个优秀的版本控制工具,使用Git可以很好地管理代码。但是,在使用Git的过程中,我们难免会遇到一些问题,例如:如何删除本地仓库。在文章中,将详细介绍如何在Git中删除本地仓库。【正文】删除本地仓库要删除本地仓库,我们需要在...
    99+
    2023-10-22
  • 如何在GitLab上创建一个仓库
    作为一个开源项目管理平台,GitLab为开发者提供了丰富的工具和功能,帮助他们更高效地管理代码、协作开发、持续集成等等。这篇文章将介绍如何在GitLab上创建一个仓库。首先,你需要有一个GitLab账户,如果还没有账户,可以先注册一个。登录...
    99+
    2023-10-22
  • 如何从远程Git仓库中删除一个仓库
    Git远程仓库删除指的是从远程Git仓库中删除一个存在的仓库。删除一个远程仓库后,该仓库将不再存在,除非您从另一个仓库克隆它。本文将介绍如何从远程Git仓库中删除一个仓库。步骤1:找到要删除的仓库的URL在Github上,单击仓库的名称,然...
    99+
    2023-10-22
  • 如何在Git中删除一个仓库
    随着计算机领域的快速发展,版本控制工具也成为程序员和开发者必不可少的工具之一,其中Git已经成为了最受欢迎和使用最广泛的版本控制系统之一。在使用Git时,我们有时会创建一些不必要或已经过时的仓库。删掉这些仓库不仅可以节省存储空间,而且可以提...
    99+
    2023-10-22
  • git如何合并本地仓库的代码
    要合并本地仓库的代码,可以按照以下步骤操作:1. 首先,确保你已经切换到要合并代码的目标分支。可以使用`git branch`命令查...
    99+
    2023-09-16
    git
  • 如何实现Linux操作Git远程仓库与本地仓库同步
    这篇文章主要介绍“如何实现Linux操作Git远程仓库与本地仓库同步”,在日常操作中,相信很多人在如何实现Linux操作Git远程仓库与本地仓库同步问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何实现Lin...
    99+
    2023-06-12
  • 如何在git中删除一个仓库文件夹
    在使用git进行版本管理时,我们可能会遇到需要删除文件夹的情况。但是,在git中删除文件夹并不像在普通的文件系统中那么简单。在本文中,我们将介绍如何在git中删除一个仓库文件夹的方法。首先,在git中删除一个文件夹,我们需要使用git rm...
    99+
    2023-10-22
  • Git如何使用git init命令来初始化一个Git仓库
    本篇内容主要讲解“Git如何使用git init命令来初始化一个Git仓库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Git如何使用git init命令来初始化一个Git仓库”吧!git in...
    99+
    2023-06-04
  • gitee如何新建一个代码仓库
    Gitee是中国领先的码云平台,为开发者提供代码托管、项目协作、社交网络、企业内部部署等全方位服务,是目前首选的国产码云平台。在Gitee上,我们可以快速创建自己的代码仓库,并进行代码的管理、版本控制以及团队协作。下面,我们将一步步介绍如何...
    99+
    2023-10-22
  • 如何安全地删除Git仓库中的“.git”文件夹
    在使用Git管理代码时,经常需要在本地创建Git仓库,以便对代码进行版本控制。在创建Git仓库的过程中,Git会默认在项目根目录下生成一个名为“.git”的文件夹,该文件夹是Git版本控制的核心。然而,在某些情况下,我们可能需要从本地删除该...
    99+
    2023-10-22
  • linux中如何跟踪多个Git远程仓库
    这篇文章给大家分享的是有关linux中如何跟踪多个Git远程仓库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。拥有一致的命名标准是保持本地和上游 Git 仓库保持一致的关键。当本地 Git 仓库的命名与远程仓库不...
    99+
    2023-06-15
  • 如何在Windows上搭建一个使用GIT的本地服务器
    在软件开发过程中,代码管理是必不可少的环节之一。GIT是一种分布式版本控制系统,已成为当今主流的代码管理工具之一。虽然有很多云端GIT仓库,但是本地搭建GIT服务器仍然是一个非常流行的做法。在这篇文章中,我们将讲解如何在Windows上搭建...
    99+
    2023-10-22
  • linux如何创建一个shell脚本
    要创建一个shell脚本,您需要编写一个文本文件,并为其添加一些特定的标记。下面是创建一个简单的shell脚本的步骤:1. 打开一个...
    99+
    2023-09-29
    Linux shell
  • 如何在Gitee上建立一个中文名称的仓库
    在Gitee上建立一个中文名称的仓库有许多好处,比如更便于中文用户理解和记忆。下面我将介绍如何在Gitee上建立一个中文名称的仓库。第一步:注册Gitee账号如果你还没有Gitee账号,需要先进行注册。打开Gitee官网(https://g...
    99+
    2023-10-22
  • Python和Git: 如何创建一个分布式的学习笔记库?
    学习笔记是学习过程中不可或缺的一部分,而创建一个分布式的学习笔记库可以让我们更好地管理和分享我们的笔记。在这篇文章中,我们将介绍如何使用Python和Git来创建一个分布式的学习笔记库。 Git是一个开源的版本控制系统,它可以帮助我们跟踪...
    99+
    2023-07-01
    git 学习笔记 分布式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作