我是否正确地对 "How to Write Go Code" 示例中 Go 工作区中的 git 存储库结构感到困惑?



我对如何编写Go Code文章有2点困惑。它们可能是文章中的错误,或者我可能只是错过了重点。在描述典型工作空间的结构时,文章说

src 子目录通常包含多个版本控制存储库(例如 Git 或 Mercurial(,用于跟踪一个或多个源包的开发。

本文中的第一个示例工作区与此描述匹配,其中 2 个文件夹代表存储库(github.com/golang/example/golang.org/x/image/(,每个文件夹在其下方都有一个 .git 目录。

后来,文章说:

如果您使用的是源代码管理系统,现在是初始化存储库、添加文件和提交第一个更改的好时机。同样,此步骤是可选的:您不需要使用源代码管理来编写 Go 代码。

然后,本文显示了在src/github.com/user/hello/目录中运行git init的示例代码。这是混淆点#1。由于github.com/user是存储库,hello是包,因此似乎应该在github.com/user级别完成git init

混淆点 #2 出现在文章末尾,当它说:

发出上述 go get 命令后,工作区目录树现在应如下所示:

然后,它显示了另一个示例存储库,该存储库在github.com/golang/example/目录下有一个.git目录,但在github.com/user/目录下没有该目录,无论是在其正下方还是在之前初始化它的hello包中。

我的问题是:

  1. 存储库应该在hello目录中初始化还是在更高一级中初始化?
  2. 最终存储库是否应该显示.git目录?

由于github.com/user是存储库,hello是包,因此似乎应该在github.com/user级别完成git init

不,不是。github.com/user是 GitHub 用户。用户具有存储库,例如github.com/user/hello。一个仓库可以容纳一个或多个 go 包,包括一个可能位于仓库顶层并与仓库同名的包。

您链接到的文档没有准确显示目录树 - 它们将目录名称组合在一起,这意味着相同深度的目录不一定具有相同的深度。

这不是文档的错误- 扁平化目录树以避免浪费屏幕空间是相当常见的(特别是在Java项目中,由于Java的文件/包命名约定,您将有许多目录都只包含一个子目录由编译器强制执行(。

"发出上述 go get 命令后,工作区目录树现在应如下所示:"之后的树形图

应如下所示:
bin/
hello                                   # command executable
src/
github.com/
golang/
example/
.git/                       # 
hello/
hello.go                # 
stringutil/                 #
reverse.go              # 
reverse_test.go         # 
user/
hello/                          # "github.com/user/hello" package repo root
hello.go                    # 
stringutil/                     # "stringutil" package source root, but not a repo
reverse.go                  # 
reverse_test.go             # test source

请注意,github.com/user被描述为"基本路径",而不是存储库根目录或包路径,但github.com/user/hello描述为包根目录。

存储库应该在 hello 目录中初始化还是更高一级?

假设hello目录是项目的根目录,并且您使用的是版本控制系统,是的。

在博客文章中,在 https://golang.org/doc/code.html#Command,是的,这个目录是hello程序/项目的根,属于命名空间github.com/user/。因此,由于此演示使用VCS,目前git,是的,它包含一个.git目录。

最终存储库是否应该显示 .git 目录?

如果这是一个存储库,那么是的,它包含一个.git或类似的目录来存储VCS的元数据。

虽然,拥有一个存储库,即由 VCS 管理的目录,对于运行 go 程序并不是强制性的。

当您想要浏览历史记录和/或保存程序的多个状态和/或编写并与其他人共享您的代码时,这是您的要求。

在企业环境中是必需的(99.999999%,肯定有一些傻瓜,我们只是人类(。

最新更新