Any chance that you might continue the project in the future? Would be quite awesome to host a jsgit repo on a server and check it out from within the browser, change it and push back. If there was a nice step by step tutorial, i would for sure try to use it to build something and give feedback on it.
2014-12-30 5:52 GMT+01:00 Tim Caswell <[email protected]>: > > > On Monday, December 29, 2014 9:02:19 AM UTC-6, serapath wrote: >> >> i'm following tim and the js-git project already for a long time... >> https://github.com/creationix/js-git >> in feature goals here: https://www.bountysource.com/teams/js-git/ >> fundraiser >> it says: >> >> - Clone remote repositories to local storage over http, git, or ssh. >> >> The problem here is the protocols allowed by browsers. I have fully > implemented clone over https (smart git http protocol), but github refuses > to enable CORS headers on their git endpoints or even tell me why they > won't turn them on. I've been asking literally for years now. The normal > git tcp protocol and ssh protocol require access to raw tcp, which a > browser can't do alone. > > >> >> - Make and commit local changes offline. >> >> Yep, this works great as can be seen in the https://tedit.creationix.com/ > website that works 100% in the browser. > > >> - Manage tags and branches offline. >> >> > This also works great, but using low level APIs where the user manually > creates the refs and tag objects if the tags are annotated. I highly > recommend reading the git internals chapter in the git book to understand > how js-git currently works. Most the APIs work at this low level > currently. http://git-scm.com/book/en/v1/Git-Internals I have not > implemented diff and merge yet, everything works in terms of the git object > graph. > > >> >> - Push changes back up to remote repositories. >> >> This is where I got stuck. Since I can't speak any of the git protocols > in a browser without involving an external proxy ( > https://github.com/creationix/git-proxy), I'm not sure how to proceed. > There are two major problems with using a proxy. > > 1. My proxy will act as a man in the middle during your secure > conversation with github. I'll be speaking wss (websockets over tls) to > the browser and https (http over tls) to the github server, but I'll be > providing my own tls credentials to the browser and be able to see all > traffic in the clear, including your credentials. I don't want the ability > to see someone's github credentials. If the proxy was for read-only clones > using the git protocol, it would be fine, except for point #2. > > 2. My proxy will act as a bottleneck and cost me resources and make your > experience dependent on my ability to keep it up. It's simply much better > for github to just add the CORS headers so that the browser can speak > directly to github. But they won't, so I got stuck here. I ended up > running out of time and money and had to work on other paying projects. > > I did have an idea to implement TLS in the browser in pure JavaScript and > letting the proxy only make TCP (without tls) connections. It will still > be a bottleneck and point of failure, but the proxy is simple to setup and > many people could setup proxies to share the load. Since the encryption > would be end-to-end, the proxy in the middle wouldn't be able to see > anything. This can probably be done with the forge project combined with > my http code. Implementing http on top of a TLS stream in pure javascript > is trivial compared to git pack protocol and tls protocol. > > I even had a crazier idea to implement ssh in pure ssh using the rsa > primitives in forge. You could generate ssh private key in your browser, > upload it to github using the rest api or manually, and then speak ssh to > clone and push using the pure js ssh implementation. But I ran out of time, > sorry. > > >> >> - Serve git repositories over http, git, or ssh >> >> I have a couple of proof-of-concepts around this area, but since if > you're creating a server, you can already access real git, it was lower > priority. > One solution is to use the git-fs backend to js-git which uses the same > filesystem format as real git. Real git can do the network stuff and > js-git will give you a read-write interface to the git repo locally. > > >> is it already possible to checkout a repository from within a browser, >> say github, add a commit and push back the changes to github? >> Are there any howtos, tutorials or other learning materials around jsgit? >> > > I do have another route using the js-github project. It implements a > js-git compatable object, but uses github's proprietary REST APIs to sync > the local database with the remote git repos. It's not as efficient and > will likely cause you to reach your rate limit real fast if you try to do a > full clone since every object is a separate http request. It does, > however, enable new workflows where you only download files on demand and > treat the remote repo as the local database. In this workflow, there is no > clone, but it's more like a nfs or samba mount. > > >> >> on nodeschool.io i found https://github.com/jlord/git-it, but it seems >> to be just about normal git. >> >> -- > Job board: http://jobs.nodejs.org/ > New group rules: > https://gist.github.com/othiym23/9886289#file-moderation-policy-md > Old group rules: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/nodejs/6ad5ec30-f081-4347-ada6-b46447fa5b95%40googlegroups.com > <https://groups.google.com/d/msgid/nodejs/6ad5ec30-f081-4347-ada6-b46447fa5b95%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- Job board: http://jobs.nodejs.org/ New group rules: https://gist.github.com/othiym23/9886289#file-moderation-policy-md Old group rules: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/nodejs/CAN5%2BLUsxen3%3DwJsjOC0Eih_7mB1Ngo%2Bq2VcHteav_nimcdSMwQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
