GithubHelp home page GithubHelp logo

node-git-remote's Introduction

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.

node-git-remote's People

Contributors

tarruda avatar

Watchers

Navid Nikpour avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.