Я правильно запутался в структуре git-репозитория в рабочей области Go в примерах «Как написать код Go»? - PullRequest
0 голосов
/ 22 сентября 2019

У меня две путаницы в отношении статьи Как написать код Go .Они могут быть ошибками в статье, или я просто упускаю суть.При описании структуры типичного рабочего пространства в статье говорится:

Подкаталог src обычно содержит несколько репозиториев контроля версий (например, для Git или Mercurial), которые отслеживают разработку одного или нескольких исходных пакетов.

Первый пример рабочей области в статье соответствует этому описанию, с 2 папками, представляющими репозитории (github.com/golang/example/ и golang.org/x/image/), каждая из которых имеет каталог .git непосредственно под ним.

Позже в статье говорится:

Если вы используете систему контроля версий, сейчас самое время инициализировать репозиторий, добавить файлы и зафиксировать ваше первое изменение.Опять же, этот шаг не является обязательным: вам не нужно использовать контроль исходного кода для написания кода Go.

Затем в статье показан пример кода, выполняющегося git init в каталоге src/github.com/user/hello/.Это точка путаницы № 1.Поскольку github.com/user является хранилищем, а hello является пакетом, похоже, что git init должно быть выполнено на уровне github.com/user.

Точка смешения # 2 приближается к концуВ статье, где говорится:

После выполнения вышеуказанной команды go get дерево каталога рабочей области должно выглядеть следующим образом:

Затем показывается другой пример репозитория, которыйимеет каталог .git в каталоге github.com/golang/example/, но ни один в каталоге github.com/user/, либо прямо под ним, либо в пакете hello, где он был инициализирован ранее.

Мои вопросы:

  1. Если хранилище было инициализировано в каталоге hello или на один уровень выше?
  2. Должно ли в конечном хранилище отображаться каталог .git?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2019

Поскольку github.com/user является хранилищем, а hello является пакетом, похоже, что git init должно быть выполнено на уровне github.com/user.

Нетнет.github.com/user является пользователем GitHub.У пользователей есть репозитории, такие как github.com/user/hello.Хранилище может содержать один или несколько пакетов go, включая пакет, который может находиться на верхнем уровне хранилища и иметь то же имя, что и хранилище.

0 голосов
/ 22 сентября 2019

Если хранилище было инициализировано в каталоге hello или на один уровень выше?

при условии, что каталог hello является корнем вашего проекта, и что вы используете контроль версийСистема, да.

В сообщении в блоге по адресу https://golang.org/doc/code.html#Command, да, этот каталог является корнем программы / проекта приветствия, принадлежащей пространству имен github.com/user/.Как следствие, и поскольку эта демонстрация использует VCS, в настоящее время git, да, он содержит каталог .git.

Должен ли в конечном хранилище отображаться каталог .git?

Если этот равен хранилищу , тогда да, он содержит .git или аналогичный каталог для хранения метаданных VCS.

Хотя,наличие репозитория, то есть каталога, управляемого VCS, не является обязательным для запуска программ go.

Это требование, которое требуется, когда вы хотите перемещаться по истории и / или сохранять несколько состояний программы,и / или написать и поделиться своим кодом с другими людьми.

В корпоративной среде это требуется (99,999999%, должны быть некоторые дураки, мы всего лишь люди).

0 голосов
/ 22 сентября 2019

Документация, на которую вы ссылались, не показывает деревья каталогов точно - они объединяют имена каталогов вместе, что означает, что каталоги одинаковой глубины не обязательно имеют одинаковую глубину.

Это не документация неправильно - довольно распространено выравнивать деревья каталогов, чтобы не тратить пространство экрана (особенно в проектах 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 - это , описываемый как корень пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...