如何使用`Init()`来模仿`go-git``PlainInit()`?

时间:2018-06-03 16:38:32

标签: git go go-git

我可以使用src-d/go-git PlainInit()来模仿CLI命令$ git init <new_repo>,但如何使用Init()获得相同的结果?

这是我到目前为止所提出的,但它没有返回相同的结果。结果看起来很相似,但文件/目录没有嵌套在<new_repo>/.git目录下,如下所示。

package main

import (
    "fmt"
    "log"

    "gopkg.in/src-d/go-billy.v4/osfs"
    "gopkg.in/src-d/go-git.v4"
    "gopkg.in/src-d/go-git.v4/storage/filesystem"
)

func main() {
    directory := "new-repo-go-git"
    fs := osfs.New(directory)

    sto, err := filesystem.NewStorage(fs)
    if err != nil {
        log.Fatal(err)
    }
    _, err = git.Init(sto, fs)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("DONE")
}

结果不是我所期望的,因为$ git init new-repo-go-git会导致new-repo-go-get/.git目录中的目录和文件。

go-git使用.git以外的文件/目录的实际结果。

$ tree -a new-repo-go-git/
new-repo-go-git/
├── .git
├── HEAD
├── config
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

PlainInit()使用git.PlainInit("new-repo-go-git-plain-init", false)

返回以下内容
$ tree -a new-repo-go-git-plain-init
new-repo-go-git-plain-init
└── .git
    ├── HEAD
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── heads
        └── tags

PlainInit()$ git init <new_repo>返回的内容类似:

$ git init new-repo-cli
Initialized empty Git repository in /path/to/new-repo-cli/.git
$ tree -a new-repo-cli
new-repo-cli
└── .git
    ├── HEAD
    ├── config
    ├── description
    ├── hooks
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   ├── pre-receive.sample
    │   ├── prepare-commit-msg.sample
    │   └── update.sample
    ├── info
    │   └── exclude
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── heads
        └── tags

0 个答案:

没有答案