2015-05-19 33 views
1

我有一個存儲庫,但是在某些情況下,本地文件可能會發生更改。我想要做一個git pull,然後用git2go寫更改。在正常的git - 即在終端上我可以做Git2Go抓取或硬拉

git fetch --all 
git reset --hard origin/master 

因此,我正試圖做使用git2go相同

func Pull(source string, dest string) error { 
    repo, err:= git.OpenRepository(dest) 
    remote, err:= repo.LookupRemote("origin") 
    log.Println(repo) //print repo address 

    cbs := &git.RemoteCallbacks{ 
     CredentialsCallback:  credentialsCallback, 
     CertificateCheckCallback: certificateCheckCallback, 
    } 

    err = remote.SetCallbacks(cbs) 
    err = remote.Fetch([]string{}, "") 
    log.Println("fetch error: ", err) //print fetch error 
    remote_master, err := repo.LookupReference("refs/remotes/origin/master") 
    mergeRemoteHead, err := repo.AnnotatedCommitFromRef(remote_master) 
    mergeHeads := make([]*git.AnnotatedCommit, 1) 
    mergeHeads[0] = mergeRemoteHead 
    err = repo.Merge(mergeHeads, nil, nil) 
    log.Println("err: ", err) 
    repo.StateCleanup() //print merge error 
    return err 
} 

它編譯罰款,並似乎運行 - 它記錄錯誤是但是被覆蓋的文件不會改變爲它們遠程的內容。我覺得我缺少的一個關鍵因素...../

我得到的輸出是:

2015/05/19 20:40:15 GitHandler.go:44: &{0x7f46cc000a40} 
2015/05/19 20:40:22 GitHandler.go:53: fetch error: <nil> 
2015/05/19 20:40:22 GitHandler.go:59: err: <nil> 

回答

3

要替換的Git命令和代碼你在旅途中的服務器非常不同的寫作目的。合併不能以任何方式模擬硬重置。

如果您確實想要合併,您應該檢查生成的索引是否存在衝突並在必要時解決它們。然後您需要創建合併提交併更新當前分支。

如果你想要做硬重置的步驟,那麼你需要寫出來,執行你的目標樹的結帳,目標樹讀入索引並寫出來,然後更新當前分支到目標提交。

這些是不同的更新方法,其中一個保存本地提交,另一個不保存。一個創造歷史,另一個創造歷史。我首先會推薦你想要執行哪種形式的更新。

+0

我不想保留本地更改。我希望應用程序始終複製git存儲庫主分支。然而有時候服務器上的東西可能會改變,所以當一個新的PULL完成時,它會清理所有的變化,以確保拉取成功。也就是說,清洗 - 重置 - 重新設置 - 等同,然後再次拉動。即,我不想保存本地更改。 – amlwwalker