Git存储文件的位置在哪里?

86

我刚刚在我的Ruby on Rails项目上运行了以下命令:

git init
git add .
git commit -a -m 'Initial'

Git 实际上存储这个仓库的位置在哪里?(它在我的本地机器上,但是在哪里?)


3
顺便提一下,git commit -a -m 'initial' 和 git commit -am 'initial' 是相同的。 - math2001
11个回答

110

这将在当前目录的 .git 文件夹中创建您的代码库。


你好,我有同样的问题。我的磁盘空间在GIT克隆完成之前就已经用完了,现在我不知道该在哪里删除旧的克隆。当我运行GIT时,我在目录下,但是在或/中没有.git文件夹。我该怎么办? 谢谢。 - Max
1
我不知道为什么没有.git目录。当在~时,你是否尝试过ls -ld .git - Matthew Flaschen
你好,感谢你的回答。我还没有找到克隆体,但第二个 git 成功了,.git 文件夹存储在 ~/common/.git 中(common 是包的名称)。我想 GIT 会将未完成的任务存储在临时文件夹中,在成功后将其转移到当前目录。我只希望它已经删除了不成功的下载。 - Max
13
最好提到这是一个隐藏目录,以防有人看不见它。 - B.K.
1
@B.K. 指出,这会影响 Windows,该文件夹是隐藏的。只是为了让大家知道如何查看它(Windows 7):F10 -> 工具 -> 文件夹选项 -> 查看 -> 显示隐藏的文件和文件夹(在高级设置的单选按钮中)。 - RebelFist
显示剩余3条评论

35
为了更完整地介绍,Git与以下内容配合使用:
- 工作树(其中的根目录是您进行git init的位置) - "Git存储库路径"(其中有一个.git,它将存储所有文件的修订版本)
GIT_DIR是一个环境变量,可以是相对于当前工作目录的绝对路径或相对路径。
如果未定义,"Git存储库路径"默认在工作树的根目录中(再次强调,这是您进行git init的位置)。
实际上,只要指定工作树路径和Git存储库路径,就可以从磁盘上的任何位置执行任何Git命令。
git command --git-dir=<path> --work-tree=<path>

但是,如果你在Git存储库的子目录之一中执行它们(没有指定GIT-DIR或工作树路径),Git会简单地在当前目录和父目录中查找,直到找到一个.git为止,假设这也是您的工作树的根目录,并将该.git用作所有文件修订的唯一容器。

注意:.git在Windows(msysgit)中也是隐藏的。
您需要执行dir /AH才能看到它。
git 2.9(2016年6月)允许进行配置


请注意,Git 2.18(2018年第二季度)正在开始进化Git存储对象的方式,通过重构内部全局数据结构来使其可以打开多个仓库、处理它们,然后关闭它们。

请查看commit 4a7c05fcommit 1fea63e(2018年3月23日)由Jonathan Nieder (artagnon)提交。
请查看commit bd27f50commit ec7283ecommit d2607facommit a68377bcommit e977fc7commit e35454fcommit 332295dcommit 2ba0bfdcommit fbe33e2commit cf78ae4commit 13068bfcommit 77f012ecommit 0b20903commit 93d8d1ecommit ca5e6d2commit cfc62fccommit 13313fccommit 9a00580(2018年3月23日)由Stefan Beller (stefanbeller)提交。
(由Junio C Hamano -- gitster --合并于commit cf0b179,2018年4月11日)

repository: 引入原始对象存储字段

原始对象存储字段将包含访问给定仓库中的对象所需的任何对象。

此补丁引入了原始对象存储并填充了objectdir,它曾经是仓库结构的一部分。

随着结构体成员的增加,我们还将填充用于清除这些成员内存的函数。

在下一步中,我们将引入一个struct object_parser,它将补充仓库结构中的对象解析:

  • 原始对象解析器是提供对原始对象内容访问的层,
  • 而高级别对象解析器代码将解析原始对象并使用 'struct object' 跟踪父子关系和其他对象关系。

    目前只向仓库结构添加较低级别的对象解析器。


当然,但你的代码文件版本在哪里?如果我切换分支,git如何获取该分支信息?这里似乎有更完整的答案(也许更准确地回答“git存储更改的位置”而不是OP的问题),链接在这里和这里。不确定是否值得编辑。 - ruffin
@ruffin:好的链接,但正如你所注意到的那样,不完全是原帖的问题。 - VonC

19

如果你正在使用英文版的Windows操作系统,Git的默认存储路径将会是C:\Documents and Settings\<current_user>\,因为在Windows上默认情况下Git本地设置位于C:\Documents and Settings\<current_user>\.git,所以Git会在C:\Documents and Settings\<current_user>\中创建一个单独的文件夹用于每个repo/clone,这里包含了所有克隆项目的目录。

例如,如果你使用以下命令安装Symfony 2:

git clone git://github.com/symfony/symfony.git

Symfony的目录和文件将会在这里

C:\Documents and Settings\< current_user>\symfony\

2
你正在谈论 git bash 的 HOME 目录。如果你改变目录,克隆的存储库当然会被创建在你从中调用 git clone 的目录中。实际回答问题的是,git 将文件存储在名为 .git 的文件夹中,无论你选择在哪里克隆它。 - Shahbaz
1
Windows 8.1 上:C:\Users\user_name\.project_name 或从 Run 中调用 ...\.project_name - Raphaël Colantonio

9
在项目的根目录中有一个隐藏的 .git 目录,其中包含配置和存储库等信息。

5
一个隐藏的目录很有意义。这正是我所怀疑的,但我在终端中看不到它。显然,仅运行 ls 不足以查看隐藏文件。你需要运行 ls -a 来查看隐藏文件。 - Yuval Karmi
3
没错。而且“hidden”被简单地定义为“以...开头”。 - Matthew Flaschen
2
“dotfiles” 是隐藏的,这可能只有熟悉基于 *nix 的系统的人才能明白,但是没错。 - Brenton Alker

4

我使用的是Windows系统,通过右键单击开始菜单中的Git Bash程序并选择属性,找到了我的位置。在"快捷方式"选项卡中,显示了"启动位置:"的值。对于我来说,它是%HOMEDRIVE%%HOMEPATH%,因此我打开命令提示符并键入echo %HOMEDRIVE%%HOMEPATH%以查看实际位置。


3
在项目根目录下的.git目录中。与其他一些版本控制系统(尤其是CVS)不同,任何子目录中都没有额外的目录。

3

我也找不到我的 git 仓库。我使用的是 Windows 8,在 C:\Program Files (x86)\Git 下(错误地)创建了我的仓库。在 bash 中,我可以看到仓库文件夹,但在 cmd 或 Windows Explorer 中找不到。

后来我想起了 Windows 的“虚拟存储”功能。我的仓库文件夹实际上是在 C:\Users\<username>\AppData\Local\VirtualStore\Program Files (x86)\Git\<myrepo> 下创建的,并且那里有我的 .git 文件夹!


1
如何使其“正确”工作并将文件夹放在您想要的位置?我遇到了其他/类似的问题,但我认为这都与虚拟存储有关。 - Terry
在Windows Vista及更高版本中,非管理员用户不允许在Program Files中创建文件,该文件夹是所有用户共用的。Windows会将文件创建在用户的VirtualStore文件夹中。最简单的解决方案是避免在受限制的文件夹中创建文件,而是在类似于Documents的地方创建它们。 - bouvierr

0
如果您正在寻找项目文件夹的创建位置。我注意到当我在Git Bash中输入以下命令时: $ git init projectName 它会告诉我该项目的文件夹位置。

0

它可能已经被创建,但仍然隐藏着。 要显示它,请转到文件资源管理器设置, 进入(视图),然后勾选隐藏项目框并刷新您的存储库 和


0
对我而言,当我运行git clone时,Git会将克隆的程序包存储在我运行命令的目录中。

- 我使用Windows。

例如:

C:\Users\user>git clone https://github.com/broosaction/aria

将创建一个文件夹

 C:\Users\user\aria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接