Git2go:在 CreateCommit() 之后,所有文件看起来都像是被添加以供删除

Git2go: After CreateCommit() all files appear like being added for deletion

我使用 git2go 在新克隆的目录上执行 AddAll() 和 CreateCommit()。 Push() 工作正常,当我将遥控器克隆到另一个地方时,我得到了所有提交的文件。但是如果我在第一个目录中调用 git status 然后我得到:

(对不起德语,我没有正确的翻译,这意味着分支与 origin/master 在同一位置,'gelöscht' 表示 'deleted''Unbeobachtete dateien' 表示 'unwatched files')

Auf Branch master
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
zum Commit vorgemerkte Änderungen:
  (benutzen Sie "git reset HEAD <Datei>..." zum Entfernen aus der Staging-Area)

    gelöscht:               .gitignore
    gelöscht:               html/.gitignore
    gelöscht:               images/.gitignore
    gelöscht:               json/.gitignore
    gelöscht:               pjs/.gitignore
    gelöscht:               pjs/test37.pjs
    gelöscht:               pjs/test37.png
    gelöscht:               sounds/.gitignore

Unbeobachtete Dateien:
  (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)

    .gitignore
    html/
    images/
    json/
    pjs/
    sounds/

我期望的是以下内容:

Nothing to commit. No files changed. (or similar)

我的代码:

 // Add
repo, err := git.OpenRepository(dir)
index, err := repo.Index()
err = index.AddAll([]string{}, git.IndexAddDefault, nil)
treeId, err := index.WriteTreeTo(repo)
tree, err := repo.LookupTree(treeId)

// Commit
sig := &git.Signature{
    Name:  userName,
    Email: userName + "@" + beego.AppConfig.String("userdata::emailserver"),
    When:  time.Now(),
}
commitId, err := repo.CreateCommit("HEAD", sig, sig, message, tree)

// Push
remote, err := repo.LookupRemote("origin")    
err = remote.Push([]string{"refs/heads/master"}, nil, sig, message)

(我删除了所有错误处理,以使其更短)

您正在打开当前存储库的索引:

index, err := repo.Index()

你正在改变它,并创建一个新的树,你随后从中创建一个提交:

err = index.AddAll([]string{}, git.IndexAddDefault, nil)
treeId, err := index.WriteTreeTo(repo)

git add 命令行不同,AddAll 没有将索引写回磁盘。此功能允许您将索引用作数据结构,而无需立即实际暂存更改。 (许多 libgit2 函数,如 merge 和 rebase,将索引用作通用数据结构,您可以继续修改或转换为树。)

因此,此时,对索引的所有更改都保留在内存中。如果你想保留你的更改,你必须显式地将索引写回磁盘:

index.Write()