git-off

git off handles large files in git repos
git clone https://noulin.net/git/git-off.git
Log | Files | Refs | README

commit cf2d41429646ebb12785bacea52f573bcc0aa0ed
parent 44f21712387b9a4d37dc05c4aca5796d08af9556
Author: Remy Noulin (Spartatek) <remy.noulin@spartatek.se>
Date:   Wed, 23 Nov 2016 09:06:44 +0100

add pem command to setup SSH private key

README.md         | 44 +++++++++++++++++++++++++++++++++-
src/gitoff.coffee | 72 ++++++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 107 insertions(+), 9 deletions(-)

Diffstat:
MREADME.md | 44+++++++++++++++++++++++++++++++++++++++++++-
Msrc/gitoff.coffee | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 107 insertions(+), 9 deletions(-)

diff --git a/README.md b/README.md @@ -20,7 +20,7 @@ for help. [https://www.npmjs.com/package/git-off](https://www.npmjs.com/package/git-off) -# USAGE +# Quick Start Setup: ``` @@ -58,6 +58,44 @@ git off env git off defaults shows first time config ``` + +# SSH Setup + +Create an SSH key: + +``` +ssh-keygen -t rsa +``` + +Copy id_rsa.pub file to SSH server and id_rsa to ~/.ssh + +Configure your private ssh key: + +``` +git off pem ~/.ssh/id_rsa +``` + +Use git off scp mode: + +``` +git off mode scp +``` + +Input user, ssh host and path for store: + +``` +git off scp $USER@localhost:offStore +``` + +Alternatively, setup SSH with ssh config, edit ~/.ssh/config and add your config: + +``` +host localhost + HostName localhost + IdentityFile ~/.ssh/id_rsa + User username +``` + # COMMANDS ``` @@ -73,6 +111,10 @@ git off integrity [thisrepo] [enable|disable] when enabled, the SHA of the file received from the store is checked again the SHA of the original file +git off pem [thisrepo] [pathToPrivateKey] + set/show git off pem. + off.pem is the private key for ssh and scp + git off scp [thisrepo] [host] setup scp config host has format host:path diff --git a/src/gitoff.coffee b/src/gitoff.coffee @@ -13,6 +13,15 @@ # use logger # # How to add a new config +# add variable in runtimeConfig +# add default settings in offDEFAULTS +# add a helper in offHelpers +# add setting of default in offCommands.install +# add a command for setting value in offCommands +# print value in offCommands.env +# add command in CLI parser +# update help +# # How to add a new transport # How to add a new command @@ -102,6 +111,7 @@ runtimeConfig = 'offIntegrity': '' 'offScp': '' 'offScpUser': '' + 'offPem': '' 'log': '' # default configuration for first time install @@ -110,6 +120,7 @@ offDEFAULTS = 'objectPath': '/.git/off/objects' 'mode': 'copy' 'integrity': 'disable' + 'pem': '' 'store': '~/.git-off/offStore' 'log': '~/.git-off/log' 'prePush': '#!/bin/sh\ncommand -v git-off >/dev/null 2>&1 || { echo >&2 "\\nThis repository is configured for Git off but \'git-off\' was not found on your path. If you no longer wish to use git off, remove this hook by deleting .git/hooks/pre-push.\\n"; exit 2; }\ngit off pre-push "$@"' @@ -258,6 +269,12 @@ offHelpers = runtimeConfig.offIntegrity = expandHome r runtimeConfig.offIntegrity + 'offPem': -> + if runtimeConfig.offPem == '' + r = gitConfig.get 'off.pem' + runtimeConfig.offPem = expandHome r + runtimeConfig.offPem + 'offScp': -> if runtimeConfig.offScp == '' runtimeConfig.offScp = gitConfig.get 'off.scphost' @@ -321,16 +338,28 @@ offHelpers = sshCmd = '"mkdir -p '+ h_l[1] + '/' + path sshCmd += '"' + # setup ssh/scp private key + if offHelpers.offPem() == '' + pem = '' + else + pem = '-i ' + offHelpers.offPem() + # ignore error from mkdir for already existing store if isNaN h_l[2] - exec 'ssh', [h_l[0], sshCmd], true + exec 'ssh', [pem, h_l[0], sshCmd], true else - exec 'ssh', ['-p ' + h_l[2], h_l[0], sshCmd], true + exec 'ssh', [pem, '-p ' + h_l[2], h_l[0], sshCmd], true return 'rmAllStore': (path) -> # rm in remote store + # setup ssh/scp private key + if offHelpers.offPem() == '' + pem = '' + else + pem = '-i ' + offHelpers.offPem() + # scphost format is host:path h_l = offHelpers.getSSHConfig() # bug in coffeescript - cant have '"mkdir '+ h_l[1] +'"' @@ -338,9 +367,9 @@ offHelpers = sshCmd += '"' # ignore error from rm if isNaN h_l[2] - exec 'ssh', [h_l[0], sshCmd], true + exec 'ssh', [pem, h_l[0], sshCmd], true else - exec 'ssh', ['-p ' + h_l[2], h_l[0], sshCmd], true + exec 'ssh', [pem, '-p ' + h_l[2], h_l[0], sshCmd], true return 'checkIntegrity': (path) -> @@ -391,11 +420,17 @@ offHelpers = f_l = file.split '/' offHelpers.mkdirStore f_l[0] + '/' + f_l[1] + # setup ssh/scp private key + if offHelpers.offPem() == '' + pem = '' + else + pem = '-i ' + offHelpers.offPem() + h_l = offHelpers.getSSHConfig() if isNaN h_l[2] - exec 'scp', [offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file] + exec 'scp', [pem, offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file] else - exec 'scp', ['-P ' + h_l[2], offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file] + exec 'scp', [pem, '-P ' + h_l[2], offHelpers.objectPath() + '/' + file, h_l[0] + ':' + h_l[1] + '/' + file] return transport['receive'] = (file) -> # create file directories in cache @@ -403,11 +438,17 @@ offHelpers = if fs.existsSync(offHelpers.objectPath() + '/' + f_l[0] + '/' + f_l[1]) == false mkdirParents offHelpers.objectPath() + '/' + f_l[0] + '/' + f_l[1] + # setup ssh/scp private key + if offHelpers.offPem() == '' + pem = '' + else + pem = '-i ' + offHelpers.offPem() + h_l = offHelpers.getSSHConfig() if isNaN h_l[2] - exec 'scp', [h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file] + exec 'scp', [pem, h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file] else - exec 'scp', ['-P ' + h_l[2], h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file] + exec 'scp', [pem, '-P ' + h_l[2], h_l[0] + ':' + h_l[1] + '/' + file, offHelpers.objectPath() + '/' + file] if offHelpers.checkIntegrity offHelpers.objectPath() + '/' + file readStream = fs.createReadStream(offHelpers.objectPath() + '/' + file) @@ -493,6 +534,8 @@ offCommands = setCfg('off.mode', offDEFAULTS.mode) if offHelpers.offIntegrity() == '' or setCfg != gitConfig.set setCfg('off.integrity', offDEFAULTS.integrity) + if offHelpers.offPem() == '' or setCfg != gitConfig.set + setCfg('off.pem', offDEFAULTS.pem) if offHelpers.offStore() == '' or setCfg != gitConfig.set setCfg('off.store',offDEFAULTS.store) @@ -532,6 +575,15 @@ offCommands = console.log 'off.integrity '.blue.bold + offHelpers.offIntegrity() return + 'pem': (setCfg) -> + len = process.argv.length + pem = process.argv[len-1] + if pem != 'pem' and pem != 'thisrepo' + setCfg('off.pem', pem) + else + console.log 'off.pem '.blue.bold + offHelpers.offPem() + return + 'scpUser': (setCfg) -> len = process.argv.length scpUser = process.argv[len-1] @@ -751,6 +803,7 @@ offCommands = 'env': -> console.log 'off.mode '.blue.bold + offHelpers.offMode() console.log 'off.integrity '.blue.bold + offHelpers.offIntegrity() + console.log 'off.pem '.blue.bold + offHelpers.offPem() console.log 'off.store '.blue.bold + offHelpers.offStore() console.log 'off.scphost '.blue.bold + offHelpers.offScp() console.log 'off.scpuser '.blue.bold + offHelpers.offScpUser() @@ -786,6 +839,9 @@ if process.argv[2] == 'scp' if process.argv[2] == 'integrity' thisrepo offCommands['integrity'] +if process.argv[2] == 'pem' + thisrepo offCommands['pem'] + if process.argv[2] == 'scpuser' thisrepo offCommands['scpUser']