On Thu, Aug 23, 2012 at 6:28 PM, Ævar Arnfjörð Bjarmason
<ava...@gmail.com> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to