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

标签 git go commit

我使用 git2go 在新克隆的目录上执行 AddAll() 和 CreateCommit()。 Push() 工作正常,当我将 Remote 克隆到另一个地方时,我得到了所有提交的文件。但是如果我在第一个目录中调用 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()

关于Git2go : After CreateCommit() all files appear like being added for deletion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37026399/

相关文章:

git - 如何在jgit中创建一个空分支

go - 这是在golang中的类型转换吗?

google-app-engine - 制作独立于 Google App Engine 的 Go Webapp

windows - 如何为 svn 提交和更新编写批处理文件

git - 如何在git中设置默认远程?

ruby-on-rails - 由于快进,使用 git 部署到 heroku 不断被拒绝

vimrc 自动提交带消息提示

git - 引用 git 中的上一个/下一个提交?

git - 损坏的 git repo 的问题

go - golang的模板中如何多次使用parse