Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 获取分叉回购的工作流程_Git_Github_Go - Fatal编程技术网

Git 获取分叉回购的工作流程

Git 获取分叉回购的工作流程,git,github,go,Git,Github,Go,我正在使用并且已经安装了go-get-github.com/apex/apex/cmd/apex。我有$GOPATH/bin/apex,效果很好。我想对apex做出一些贡献,所以我将它分叉并运行了go-get-github.com/ajcrites/apex/cmd/apex。到目前为止还不错 当我想实际测试我对项目的本地更改时,问题就出现了。我可以看到三个问题: 本地运行go build不起作用,因为main.go文件直接从$GOPATH/src/github.com/apex导入。为了进行测

我正在使用并且已经安装了
go-get-github.com/apex/apex/cmd/apex
。我有
$GOPATH/bin/apex
,效果很好。我想对apex做出一些贡献,所以我将它分叉并运行了
go-get-github.com/ajcrites/apex/cmd/apex
。到目前为止还不错

当我想实际测试我对项目的本地更改时,问题就出现了。我可以看到三个问题:

  • 本地运行
    go build
    不起作用,因为
    main.go
    文件直接从
    $GOPATH/src/github.com/apex
    导入。为了进行测试,我需要从
    $GOPATH/src/github.com/ajcrites导入它
  • 手动更改
    main.go
    以从
    ajcrites
    导入是不可靠的,因为我不能/不应该提交这些更改。此外,即使它确实是用我的文件构建的——我能说出来,因为它会将它们过滤掉——但发出的二进制文件根本不起作用
  • $GOPATH/src/github.com/ajcrites
    更改为
    /apex
    并以这种方式构建确实可行,但存在两个问题:
    • 文件系统目录与实际的repo名称不匹配,这很奇怪
    • 我仍然希望能够使用
      /apex
      中的实际二进制文件,而不只是为了测试本地更改而对其进行破坏

  • 有没有推荐的方法可以克隆forked
    go
    存储库并在本地构建/测试?

    如果您不想更改代码中的导入路径,或者不想更改项目中的源代码,请不要更改代码位于GOPATH中的目录。如果要更改导入路径,则需要在所有源中重写该路径,否则将导入多个版本的包

    进入
    $GOPATH/src/github.com/apex/apex
    目录,将
    原点
    遥控器更改为分叉回购。按照惯例,我还将原始回购添加为
    上游
    远程,这样我也可以方便地从那里获取和合并更改


    由于从go1.6开始默认启用了vendoring,因此您可以将源代码放在
    vendor/
    目录中,并在其中进行修改。使用git子模块还可以使它处于单独的版本控制之下,但要链接到您的项目

    以下是我推荐并用于管理GitHub上的Gorilla组织的流程:

    $ 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 git@github.com:elithrar/csrf.git
    
    $ git checkout -b new-feature-X
    $ <do some work on it>
    
    # Install those changes.
    $ go install ./...
    
    $go get github.com/gorilla/csrf
    $cd$GOPATH/src/github.com/gorilla/csrf
    #或者,您可以git remote remove origin+re add as SSH
    $git远程添加elithrargit@github.com:elithrar/csrf.git
    $git签出-b新功能-X
    $ 
    #安装这些更改。
    $go安装。/。。。
    

    就这样。无需更改任何现有程序中的导入路径。如果您正在出售依赖项,您可以在出售的副本中更改它。

    当我这样做时,转到github.com/ajcrites/apex/cmd/apex
    原始远程已设置为
    https://github.com/ajcrites/apex
    (不是ssh,另一个麻烦事)。这并不能解决问题——我认为这是一个与Go/Godeps有关的问题,与git没有任何关系。@ExplosionPills:对不起,在那里粘贴了错误的URL。你想保留上游路径,所以使用
    github.com/apex/apex
    @ExplosionPills:噢,你没有提到
    godeps
    。我不经常使用它,所以可能有一种更好的方法专门处理该工具中的fork。我的建议是一般的围棋。很抱歉没有提到godeps;在这一点上我真的不太了解go,我认为godeps是相当标准的。apex正在使用godeps;我没有选择这样或那样做。谢谢;他们不建议你用叉子?我认为这也不能真正解决在仍然安装稳定二进制文件的情况下测试本地更改的问题。您有两个选择:通过git checkout master和go install重新安装稳定二进制文件。/…或者将新分支重新提供给您的项目。使用forks意味着您不仅要在项目中,而且要在试图修改的库的任何子包中重新写入所有URL(因为它可能会导入自己的帮助程序库)。