Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git存储库应该在哪里创建?_Git_Version Control_Filesystems - Fatal编程技术网

git存储库应该在哪里创建?

git存储库应该在哪里创建?,git,version-control,filesystems,Git,Version Control,Filesystems,git存储库可以在受版本控制的文件夹中创建,还是应该放在该文件夹之外?或者两者都有可能?存储库位置重要吗?git init将在项目的根目录中创建一个git存储库。据我所知,git存储库总是在您正在处理的项目(或您想要进行版本控制的文件夹)的根目录中创建的 git在根目录中创建一个.git文件夹,其中包含所有版本/分支/提交等默认情况下,git存储库(.git文件夹位于文件夹根)是在要进行版本控制的文件夹中创建的。您可以在它之外创建它,但不需要它,这是一种非常特殊的情况。git存储库的位置并不重要

git存储库可以在受版本控制的文件夹中创建,还是应该放在该文件夹之外?或者两者都有可能?存储库位置重要吗?

git init
将在项目的根目录中创建一个git存储库。据我所知,git存储库总是在您正在处理的项目(或您想要进行版本控制的文件夹)的根目录中创建的


git在根目录中创建一个.git文件夹,其中包含所有版本/分支/提交等

默认情况下,git存储库(
.git
文件夹位于文件夹根)是在要进行版本控制的文件夹中创建的。您可以在它之外创建它,但不需要它,这是一种非常特殊的情况。

git存储库的位置并不重要,您可以将它们放在任何地方

尽管如此,将存储库放在其他存储库中并不十分可取,因为外部git存储库也会跟踪内部存储库中的更改


你能做的就是使用。基本上,您可以将其他现有存储库导入到存储库中,并跟踪其中的某个提交

git repo是在与源代码相同的位置创建的。请记住,git不像Subversion那样在中心位置(例如在服务器上)有一个存储库。相反,您的源代码目录是您的git repo,如下所示:

$ cd mysources
$ git init . 
$ git add ...
toaster-simulator.git/
    HEAD
    config
    index
    objects/
    refs/
    ...

现在,
mysources/.git
将包含git对象数据库,您可以添加/commit/branch/等等。

这两种方法都是可能的,但简而言之,是的,这很重要。在我的解释中,我们将调用您在超级存储库中推送和拉出的存储库。这只是为了让事情更清楚

以下是您的两个选择:

  • 受版本控制的文件夹外超级存储库:如果您在本地PC上执行此操作,您当然会承担多次存储所有内容的成本。实际上,您将把超级存储库存储在某个地方,再加上签出版本(您的工作目录),再加上当前签出分支的文件。然而,现在一般来说,存储并不是一个大问题。这种方法的最大优点是,无论您身在何处,都可以克隆/拉/推到超级存储库

  • 受版本控制的文件夹内的超级存储库:不使用额外存储。但是,这样做有一个很大的缺点:您的存储库不会是一个空的。这意味着它已签出文件。如果您当前在分支
    A
    ,则无法从远程位置推送到该分支
    A
    。您必须先将您的工作分支更改为分支
    B
    ,然后其他人才能使用分支
    A

  • 因此,如果您只需要版本控制,但不打算在任何其他PC上处理您的项目,那么在项目文件夹中创建超级存储库就可以了。如果您确实计划在其他地方使用它,请在您的PC上的其他地方创建一个
    bare
    超级存储库。
    bare
    存储库没有任何签出分支

    以下命令将创建一个新的裸git存储库,并将当前数据推送到其中。从那时起,您应该能够
    git push
    git pull
    。。。如你所愿

    cd
    mkdir myproject.git
    cd myproject.git
    git init --bare
    cd
    cd project_folder
    git init
    git add *
    git commit -m "Initial push"
    git remote add origin ~/myproject.git
    git push origin master
    
    [编辑]使解释更加清晰。

    添加第六个答案在这一点上可能有点徒劳无益,但我为教程编写了类似的内容,我认为这个问题的答案清楚地解释了裸存储库和非裸存储库的标准布局是很重要的

    通常使用git时,您将使用一个非裸存储库,或一个具有工作树的存储库。默认情况下,包含
    .git
    目录的目录将位于该存储库的工作树的顶层。例如,如果您在名为
    toaster simulator
    的目录中创建了这样一个存储库,则目录结构可能如下所示:

    toaster-simulator/
        .git/
            HEAD
            config
            index
            objects/
            refs/
            ...
        README
        Makefile
        src/
            toaster.c
    
    在存储库的顶层只有一个
    .git
    目录。1此目录包含存储库的整个历史记录、所有分支、构成历史记录中每个提交的每个文件的对象等。(例如,
    .git/objects
    目录包含将对象名称映射到文件、提交等的数据库;
    HEAD
    指向当前分支;等等。)您不应手动删除或更改此目录中的文件,否则将有损坏存储库的风险。
    .git
    目录之外的所有内容都是您的工作树。您只需在开发项目时按常规编辑这些文件即可

    也许对于刚接触git的人来说,最令人惊讶的事情是,如果你从一个分支切换到另一个分支,工作树中的文件可能会完全改变。虽然这可能会让你第一次看到它时感到震惊,但这是一个很好的特性——你几乎不需要在你的计算机上有多个存储库副本,因为switchi从一个分支到另一个分支是如此快速和容易。(为了防止您丢失数据,如果您的工作树中有未记录在提交中的更改,并且这些更改位于可以通过切换分支以任何方式进行更改的文件中,git将阻止您像这样切换分支。一旦您使用处于特定状态的文件创建了提交,git将非常困难。)(你很可能会丢失这些文件。)

    另一种类型的存储库是裸存储库,它本质上类似于
    .git
    目录,但没有工作树。您通常将其用于许多人将要对其进行更改的存储库-您不会在此存储库上进行开发,因此工作树只会碍事。C