2016-03-02 2 views
4

Я использую apex и установил его с go get github.com/apex/apex/cmd/apex. У меня $GOPATH/bin/apex, который отлично работает. Я хотел внести свой вклад в вершину, поэтому я разветвил ее и запустил go get github.com/ajcrites/apex/cmd/apex. Все идет нормально.Go get workflow for forked repo

Проблема возникает, когда я хочу проверить мои местные изменения в проекте. Есть три вопроса, я вижу:

  1. Запуск go build локально не работает, потому что main.go импорта файлов непосредственно из $GOPATH/src/github.com/apex. Мне нужно импортировать из $GOPATH/src/github.com/ajcrites для целей тестирования
  2. Изменение main.go вручную для импорта из ajcrites является неустойчивым, поскольку я не могу/не должен совершать эти изменения. Более того, несмотря на то, что он работает с моими файлами - я могу сказать, потому что он их начерчивает - бинарный файл, который испускается, не работает вообще.
  3. Изменение $GOPATH/src/github.com/ajcrites к /apex и строительство, что способ действительно работает, но есть два вопроса:
    • Каталог файловой системы не совпадает с именем фактического репо, который странно
    • я все еще хочу, чтобы иметь возможность использовать фактические двоичный из /apex без затирания его только для целей тестирования локальных изменений

есть ли рекомендуемый способ клона раздвоенного go репозиториев и сборки/тестирования локально?

ответ

1

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

Зайдите в каталог $GOPATH/src/github.com/apex/apex и смените origin на ваш разветвленный репо. По соглашению, я также добавляю исходное репо как удаленный upstream, поэтому я могу удобно получать и сменять изменения там же.

Поскольку продажа включена по умолчанию с go1.6, вы можете поместить исходный код в находящийся под вашим контролем каталог vendor/ и внести в него свои модификации. Использование git-подмодулей также позволяет вам поддерживать его под отдельным контролем версий, но привязано к вашему проекту.

+0

Когда я делаю 'go get github.com/ajcrites/apex/cmd/apex' источник remote _is_ уже установлен в' https: // github.com/ajcrites/apex' (не ssh, другое раздражение). Это не решает проблему - я думаю, что это проблема, связанная с Go/Godeps и не имеющая ничего общего с git. –

+0

@ExplosionPills: извините, вставил туда неправильный URL. Вы хотите сохранить восходящий путь, поэтому используйте 'github.com/apex/apex'. – JimB

+0

@ExplosionPills: О, и вы не упоминали о 'godeps'. Я не использую это очень часто, поэтому может быть лучший способ обработать вилки в этом инструменте. Мои рекомендации были для общего. – JimB

0

Вот поток рекомендую и использовать для управления организацией горилл на GitHub:

$ go get github.com/gorilla/csrf 
$ cd $GOPATH/src/github.com/gorilla/csrf 

# Alternatively, you can git remote remove origin + re-add as SSH 
$ git remote add elithrar [email protected]:elithrar/csrf.git 

$ git checkout -b new-feature-X 
$ <do some work on it> 

# Install those changes. 
$ go install ./... 

Вот и все. Нет необходимости изменять пути импорта в любых существующих программах. Если вы продаете зависимости, вы можете просто изменить его в копии, предоставленной производителем.

+0

Thanks; они не рекомендуют использовать вилку? Я думаю, что это также на самом деле не решает проблему проверки локальных изменений при сохранении стабильной бинарной системы. –

+1

У вас есть два варианта: переустановите стабильную двоичную копию после выполнения «git checkout master && go install./...» или, альтернативно, вы перепродаете эту новую ветку в свой проект. Использование forks означает, что вы должны переписать все URL-адреса не только в своем проекте, но также и в любых подпакетах библиотеки, которую вы пытаетесь изменить (поскольку она может импортировать свои собственные вспомогательные библиотеки). – elithrar

Смежные вопросы