Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
git-transmit opens your recently modified files using Panic's Transmit.app DockSend
#!/usr/bin/env bash
# author: Thomas Aylott SubtleGradient.com
echo "Transmitting"
for i in `git log -${1:-1} $2 --name-only|grep -E '^[^ ]+$'|sort|uniq`; do
if [[ -e $i ]]; then
echo " $i"
open -a Transmit $i
fi
done
@subtleGradient

This comment has been minimized.

Copy link
Owner Author

commented Apr 26, 2010

it parses your git log for files
by default it looks at the most recent commit
but if you pass in a number it'll use that number of commits
and you can pass extra params after that too
e.g. git-transmit 9999 --since=yesterday
to upload all files from the past 9999 commits since yesterday

it technically just tells Transmit to open each of those files
and then Transmit will do whatever it does
you could replace "Transmit" with the name of some other app if you prefer

@subtleGradient

This comment has been minimized.

Copy link
Owner Author

commented Apr 26, 2010

I'm sure there's a better way to do this than to parse the git log, but this works well enough for me sofar.

@dancourse

This comment has been minimized.

Copy link

commented Feb 27, 2012

Lovely! Is there any way to make Transmit pick the correct Favourite?

It just seems to open up the same favourite without asking (and putting my files live NOT staged :S )

@subtleGradient

This comment has been minimized.

Copy link
Owner Author

commented Feb 27, 2012

I have no idea. Sorry :[

Well, I guess you setup DockSend only on one favorite and not the other.

@dancourse

This comment has been minimized.

Copy link

commented Mar 2, 2012

Just had an idea!

What if you export 2 droplets with all the FTP details in it... eg,
ftp-live.app
ftp-staging.app

Then type,
sh git-transmit 1 --since=yesterday live

or

sh git-transmit 1 --since=yesterday staging

Then it calls the correct droplet app, (afraid I don't know shell scripting to make it run an if statement)
open -a ftp-live.app $i

or

open -a ftp-staging.app $i

@subtleGradient

This comment has been minimized.

Copy link
Owner Author

commented Mar 2, 2012

@dancourse

This comment has been minimized.

Copy link

commented Mar 3, 2012

Nice one!

Got the if statement working fine. However, it just seems to ignore the local file directory and puts them all to the root?

echo "Transmitting..."
for i in git log -${2:-1} $3 --name-only|grep -E '^[^ ]+$'|sort|uniq; do
if [[ -e $i ]]; then
echo " $i"
if [ $1 == 'live' ]
then
open -a ftp-live.app $i
fi
if [ $1 == 'staging' ]
then
open -a ftp-staging.app $i
fi
fi
done

@subtleGradient

This comment has been minimized.

Copy link
Owner Author

commented Mar 3, 2012

@dancourse

This comment has been minimized.

Copy link

commented Mar 3, 2012

@billkeller

This comment has been minimized.

Copy link

commented May 15, 2012

@subtleGradient Thanks for this, it's great!

@dotdreaming

This comment has been minimized.

Copy link

commented Jun 20, 2013

@subtleGradient thanks for this, its great! I am also trying to configure this to deploy to specific ftp server/transmit favourites. It would be cool if I could get to check for a environment argument e.g $ git-transmit dev

@dancourse did you manage to get this to work with specific Transmit favourite? At the moment the script will deploy to all favourites.

@quickshiftin

This comment has been minimized.

Copy link

commented Feb 4, 2014

Hey guys, checkout the fork I just uploaded. It's aims to be smart about only pushing files that have changed by using a local tag to track where the repo was at each time you do a push. https://gist.github.com/quickshiftin/8809435

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.