git用nodegit克隆一个裸仓库

问题描述 投票:1回答:1

嗨,

我正在克隆工作树作为nodegit中的裸存储库

Git.Clone('/work/localrepo', '/git/newbare', {bare: 1})

这就像创建一个裸仓库一样

# in /git/newbare
> git clone --bare /work/localrepo

注意:newbare具有对localrepo中所有/git/newbare/refs/remote/origin分支的引用,但只有localrepo's活动分支被克隆到newbare's本地引用

这意味着如果localrepo在克隆时位于主服务器上,则newbare仅在跟踪主服务器上

现在在git中,我可以使用[]跟踪origin上的所有分支>

#in bare

> git fetch origin '+refs/*;refs/*'

>>> /git/newbare
    From /work/localrepo
      * [new branch]      feature     -> feature

如果您想在此处获取更多信息,请查看refspec。>>

问题

我不知道如何在裸目录中为remote/originnodegit上的所有分支设置跟踪分支>

[嗨,我正在将工作树作为裸仓库克隆到nodegit Git.Clone('/ work / localrepo','/ git / newbare',{bare:1})中,这就像在/ git中创建# / newbare> git clone --bare / work / ...

知道了

我写了这个并解决了我的问题

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
    }
}

[如果有人觉得这很有趣,我会尽力解释。现在,你去。有一个好人!

node.js git git-branch git-fetch nodegit
1个回答
0
投票

知道了

© www.soinside.com 2019 - 2024. All rights reserved.