mirror of
https://github.com/tj/git-extras.git
synced 2026-09-10 23:46:24 -04:00
* feat(scp): add -v/--verbose and -i/--interactive flags git scp/git rscp printed a diff via plain `git diff`/`git diff --stat` with no `--no-pager` and no TTY check, blocking on the user's pager. Add -v/--verbose to print the diff via --no-pager before syncing, and -i/--interactive to also prompt for confirmation before the real push/copy. Both apply to git scp and git rscp, and must precede <remote>. Updates man/git-scp.md and Commands.md. * feat(scp): add -n/--dry-run flag Add -n/--dry-run to preview a sync without changing anything: rsync runs with -n, and git add --force / ssh ... rm are skipped outright. Implies --verbose, since confirming or previewing with nothing shown is useless. Also restructures scp_and_stage's push/delete blocks from `&&`-chains into if/then, needed to branch on dry-run, which incidentally fixes a latent bug where a non-TTY COLOR_RESET could silently skip the real rsync/git add/ssh rm calls. Updates man/git-scp.md and Commands.md. * test(scp): add coverage for -n/--dry-run and -i/--interactive abort git-scp had no test coverage at all. Cover the two paths that need no real remote destination: dry-run must preview without touching the index, working tree, or remote path, and declining the interactive confirmation must abort before anything syncs. * feat(scp): Code review * feat(scp): Code review
101 lines
2.7 KiB
Markdown
101 lines
2.7 KiB
Markdown
git-scp(1) -- Copy files to SSH compatible `git-remote`
|
|
=======================================================
|
|
|
|
## SYNOPSIS
|
|
|
|
`git scp` -h|help|?
|
|
`git scp` [options] <remote> [<commits>...|<path>...]
|
|
`git rscp` [options] <remote> <path>
|
|
|
|
## DESCRIPTION
|
|
|
|
A convenient way to copy files from the current working tree to the working directory of a remote repository. If a `<commits>...` is provided, only files that has changed within the commit range will be copied.
|
|
|
|
Internally this script uses `rsync` and not `scp` as the name suggests.
|
|
|
|
`git-rscp` - The reverse of `git-scp`. Copies specific files from the working directory of a remote repository to the current working directory.
|
|
|
|
## OPTIONS
|
|
|
|
<remote>
|
|
|
|
The git remote where you want to copy your files.
|
|
|
|
<commits>...
|
|
|
|
Any commit, commit range or tree. Uses `git-diff`(1)
|
|
|
|
<path>...
|
|
|
|
The <paths> parameters, when given, are used to limit the diff to the named paths (you can give directory names and get diff for all files under them).
|
|
|
|
-v, --verbose
|
|
|
|
Print what will be synced before syncing: the diff for `git scp`, or a preview (rsync dry-run) for `git rscp`.
|
|
|
|
-i, --interactive
|
|
|
|
Same as `--verbose`, but also prompt for confirmation before syncing. Implies `--verbose`
|
|
|
|
-n, --dry-run
|
|
|
|
Show what would be synced, change nothing. Implies `--verbose`, and no staging or remote writes/deletes happen.
|
|
|
|
## GIT CONFIGS
|
|
|
|
To sanitize files using `dos2unix` before copying files
|
|
|
|
$ git config --global --add extras.scp.sanitize dos2unix
|
|
|
|
You can run the files through PHP lint (i.e. `php -l`) before copying files
|
|
|
|
$ git config --global --add extras.scp.sanitize php_lint
|
|
|
|
## EXAMPLES
|
|
|
|
Make sure you have `git-remote`(1) setup
|
|
|
|
$ git remote add staging myStagingServer:/var/www/html
|
|
|
|
Copy unstaged files to remote. Useful when you want to make quick test without making any commits
|
|
|
|
$ git scp staging
|
|
|
|
Copy staged and unstaged files to remote
|
|
|
|
$ git scp staging HEAD
|
|
|
|
Copy files that has been changed in the last commit, plus any staged or unstaged files to remote
|
|
|
|
$ git scp staging HEAD~1
|
|
|
|
Copy files that has been changed between now and a tag
|
|
|
|
$ git scp staging v1.2.3
|
|
|
|
Copy specific files
|
|
|
|
$ git scp staging index.html .gitignore .htaccess
|
|
|
|
Copy specific directory
|
|
|
|
$ git scp staging js/vendor/
|
|
|
|
Copy files from specific directory to multiple servers
|
|
|
|
$ for dest in web1 web2 web3; do
|
|
git diff --name-only 4.8.3 4.8.2 app/code/community app/design skin/ | xargs git scp $dest
|
|
done;
|
|
|
|
## AUTHOR
|
|
|
|
Written by Chern Jie <<lim@chernjie.com>>
|
|
|
|
## REPORTING BUGS
|
|
|
|
<<https://github.com/chernjie/git-extras/issues>>
|
|
|
|
## SEE ALSO
|
|
|
|
<<https://github.com/tj/git-extras>>
|