git-remote

    0.0.1 • Public • Published

    node-git-remote

    Provides simple API for interacting with git repositories remotely. For now only a subset of the packfile protocol and file/ssh/git transports are supported.

    Installation

    npm install git-remote

    Usage

    Consider that we are working from the same context as shown in git-core usage

    connect = require('git-remote');
     
    // first step is to connect to some remote:
    remote = connect('/local/repo.git');
    // or
    remote = connect('git://somehost/remote/repo.git');
    // or
    remote = connect('user@host:remote/repo.git', {
      key: fs.readFileSync('/path/to/ssh/private/key')
    });
     
    // fetch data
    fetch = remote.fetch();
     
    fetch.on('discover', function(refs) {
      console.log('Remote refs': refs);
      // retrieve all history of master and topic branch
      refs['heads/master'].want();
      refs['heads/topic'].want();
      fetch.flush();
    });
     
    fetch.on('progress', function(progressStatus) {
      console.log(progressStatus);
    });
     
    fetch.on('fetched', function(fetched) {
      console.log('Master branch latest commit:', fetched['heads/master']);      
      console.log('Topic branch latest commit:', fetched['heads/topic']);      
    });
     
    // It is possible to set the maximum history depth. For example, if all you
    // need is the tree pointed by a tag or branch:
     
    fetch = remote.fetch();
    fetch.maxDepth = 1;
     
    fetch.on('discover', function(refs) {
      refs['heads/master'].want();
      fetch.flush();
    });
     
    fetch.on('fetched', function(fetched) {
      console.log(fetched['heads/master'].tree);
      // the 'parents' properties of the commit only contains sha1 strings
    };
     
    // modify a remote repo
    push = remote.push();
     
    push.on('discover', function(refs) { 
     // update the master branch with the c3 and parents
     refs['heads/master'].update(c3);
     // delete a tag
     refs['tags/v0.0.1'].del();
     // create a new branch referencing 'c2'
     push.create('heads/new-branch', c2);
     // flush the commands
     push.flush();
    });
     
    push.on('pushed', function(status) {
      console.log(status);
    });

    Limitations

    For now, both the git-core/git-remote packages work completely on memory, so don't use this package to retrieve a large amount of objects. If you have enough memory, you can see what I mean by opening node REPL and pasting this:

    connect = require('git-remote');
    remote = connect('git://github.com/torvalds/linux.git');
    fetch = remote.fetch();
    // never forget maxDepth fetching from big repositories!
    fetch.maxDepth = 1; 
     
    fetch.on('discover', function(refs) {
      refs['tags/v2.6.11-tree'].want();
      fetch.flush();
    });
     
    fetch.on('progress', function(p) {
      console.log(p);
    });
     
    fetch.on('fetched', function(fetched){
      console.log('Fetched the initial linux import into git. Here is the tag message:');
      console.log(fetched['tags/v2.6.11-tree'].message);
    });

    Inspect the process using 'top' or some other tool. The memory usage should go past 400mb.

    Keywords

    none

    Install

    npm i git-remote

    DownloadsWeekly Downloads

    3

    Version

    0.0.1

    License

    BSD

    Last publish

    Collaborators

    • tarruda