[英]git-clone a bare repo with nodegit
我正在將工作樹克隆為nodegit
中的裸倉庫
Git.Clone('/work/localrepo', '/git/newbare', {bare: 1})
這會創建一個裸倉庫,就像
# in /git/newbare
> git clone --bare /work/localrepo
注意: newbare
對/git/newbare/refs/remote/origin
中的所有localrepo
分支都有引用,但只有localrepo's
活動分支被克隆到newbare's
本地引用中
這意味着如果localrepo
在克隆時在 master 上,那么newbare
只會跟蹤 master
現在在git
origin
可以用
#in bare
> git fetch origin '+refs/*;refs/*'
>>> /git/newbare
From /work/localrepo
* [new branch] feature -> feature
如果您想在此處獲取有關獲取的更多信息,請查看refspec 。
我不知道如何在裸目錄中設置跟蹤分支,使用nodegit
為remote/origin
上的所有分支
我寫了這個並解決了我的問題
module.exports = {
async trackRemoteBranch(repo, remote_name, branch_name) {
let remote_path = path.join(remote_name, branch_name)
let branch_commit = await repo.getBranchCommit(remote_path)
let branch_ref = await repo.createBranch(branch_name, branch_commit)
await Branch.setUpstream(branch_ref, remote_path)
return true
},
/**
* refs/remotes/origin/master =>
* {
* remote_name: origin,
* branch_name: master,
* }
* very rough solution
*/
async cleaveRef(remote_ref) {
let parts = remote_ref.split('/')
let [remote_name, branch_name] = parts.slice(parts.length - 2)
return {
remote_name,
branch_name
}
},
async getRemoteReferences(repo) {
let refs = await repo.getReferences()
let remote_refs = refs
.filter((ref) => ref.isRemote())
.map(ref => ref.name())
return remote_refs
},
async trackAll(repo) {
(await this.getRemoteReferences(repo))
.map(ref => this.cleaveRef(ref))
.forEach(async ({remote_name, branch_name}) => {
try {
await this.trackRemoteBranch(config, remote_name, branch_name)
} catch (err) {}
})
return true
}
}
如果有人覺得這很有趣,我可以盡力解釋。 現在,這里是 go。 有一個好人!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.