On Thu, Aug 23, 2012 at 6:28 PM, Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > I'm planning on using Git for a deployment process where the steps are > basically: > > 1. You log into a deployment host, cd into software.git, do git pull > 2. A tool runs "make" for you, creates a deployment-YYYYMMDD-HHMMSS tag > 3. That make step will create a bunch of generated (text) files > 4. Get a list of these with : git clean -dxfn > 5. Copy those to to software-generated.git, removing any that we > didn't just create, adding any that are new > 6. Commit that, tag it with generated-deployment-YYYYMMDD-HHMMSS > 7. Push out both our generated software.git and > software-generated.git tag to our servers > 8. git reset --hard both of those to our newly pushed out tags > 9. Do git clean -dxf on software.git remove old generated files > 10. Copy new generated files from generated-software.git to software.git > 11. Restart our application to pick up the new software > > For this I'll need to write some "git snapshot-commit" tool for #5 and > #6 to commit whatever the current state of the directory is (with > removed/added files), and hack up something to do #9-#10. > > This should all be relatively easy, I was just wondering if there was > any prior art on this that I could use instead of hacking it up > myself. Here's a quick hack that does #4-6 but not #9-10 yet, although that would be easy: https://gist.github.com/3440792 Suggestions for improvements welcome, particularly whether there's a simpler way to do this to nuke existing files in a repo and replace it with new files all staged for commit: # Go to the target repository, nuke anything already there chdir $to_repository; system "git reset --hard"; system "git clean -dxf"; system "git ls-tree --name-only HEAD -z | xargs -0 rm -rf"; system "git add --update"; # stage any removals Followed by: system "tar xvf incoming.tar"; system "rm incoming.tar"; system "git add * .??* || :"; # Might die if we empty the repo, TODO: make this use status -> add each file system "git commit -m'Bump copy from $from_repository to $to_repository' || :"; # We might have nothing to change! -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html