2

私のリポジトリ全体が github.com/my_repo とローカル ファイル システムの両方にあると仮定しましょう。ソースファイルは「github.com/my_repo/pkg」をインポートします。を実行するgo runと、リモート ファイルを取得してインポートしますか、それともローカル ファイルを優先しますか?

一般的なリモート リポジトリ (github/launchpad/etc ではない) がある場合、リモート リポジトリを取得することを好むか、ローカル ファイルを使用することを好むか?

4

3 に答える 3

2

'go run' は、ネットから何も取得しません。これを行う唯一の Go コマンドは「go get」です。

于 2013-06-10T00:17:38.777 に答える
1

http://golang.org/doc/code.html#remoteに従って

指定されたパッケージがワークスペースに存在しない場合、go get は GOPATH で指定された最初のワークスペース内にパッケージを配置します。(パッケージが既に存在する場合、go get はリモート フェッチをスキップし、go install と同じように動作します。)

または、言い換えれば:

  1. Go はローカルでパッケージをチェックします$GOPATH
  2. 存在しない場合、Go はそれを呼び出しgo getて取得します。

これは、特定のバージョンのレポを期待している場合に注意する価値があります。go は、インストールされている Go のバージョンの最新のものを取得します。リポジトリに特定のタグがない場合、マスター ブランチからヘッドが取得されます。バージョン管理/ドキュメントのどこかに必要なリポジトリのバージョンを書き留めて、後の (そして壊れる可能性のある) リポジトリを取得しないようにすることをお勧めします。

于 2013-06-10T00:22:22.287 に答える
0

go get は ... の HEAD を取得し、切り離された HEAD状態masterでレポを複製することに注意してください。 つまり、いくつかのコミットを追加する場合は、「ブランチなし」モードで行います。 独自のローカルコミットを行う前に、まず次のことを行う必要があります。

git checkout -b master --track origin/master

Git 1.2 (2013 年第 4 四半期) はそれを変更します: Go のヒント (2013-09-07) で何が起こっているかを参照してください:

go getgit リポジトリ用

関連する CL: CL 12923043、その他いくつかは残念ながら番号がありません。

go get -ugit リポジトリで go get を使用したことがあり、後で実際のクローンを見に行ったことがある場合は、HEAD が切り離された状態にあり、HEAD が特定のコミットを指している状態で、すべてが切り離された状態に戻ることに気付いたかもしれません。リモートブランチで。

これは技術的には問題ではありませんが (master ブランチをチェックアウトすることもできます)、混乱を招き、知らないうちにデータが失われることがあります。

ただし、Go 1.2 では、go get は常に (予想どおり) 「適切な」クローンを作成し、アクティブなmasterbranchgo get -u使用して、 git pull とそのすべての効果 (競合やコミットされていない変更の場合の中止など) を使用します。
Go 1.2 より前の古いクローンは、 によって新しい形式に自動的に更新されgo get -uます。

于 2013-09-16T08:59:23.363 に答える