I have a website directory versioned with git. I use submodules for required libraries like Twitter Bootstrap, colorbox and lessjs because I should not track the sourcecode but only the version of their code I use.
Now I want to deploy the project and therefore I need the submodule code too.
By using git archive
I don't get the source files/code from the submodules.
The following three approaches TRY to achieve what I want but dont't work: 1st approach
#!/bin/sh
export revision="$1"
export GIT_INDEX_FILE=".git/tmpindex"
rm -f "$GIT_INDEX_FILE"
git read-tree $revision
export up="$(pwd)"
read_one_level () {
export GIT_ALTERNATE_OBJECT_DIRECTORIES="$GIT_ALTERNATE_OBJECT_DIRECTORIES":$(
git submodule foreach 'echo "$up/$path/.git/objects"' |
grep -E -v '^(Entering|No submodule mapping found)' |
tr '\n' : |
sed 's/:$//'
)
git submodule foreach '
cd "$up"
subcommit=$(git rev-parse :"$path")
git rm --cached "$path"
git read-tree -i --prefix="$path/" $subcommit
' >/dev/null
}
while git ls-files -s | grep -q ^160000; do
read_one_level
done
git archive --format=tar $(git write-tree)
rm -f "$GIT_INDEX_FILE"
Thomas Rast in http://git.661346.n2.nabble.com/Running-git-archive-recursively-over-submodules-td4577012.html
This gives me errors both on Windows as in Linux that there are no objects files found.
2nd approach https://github.com/meitar/git-archive-all.sh
Complains about mktemp not found on Windows. And correcting calls to git archive
(from git-archive
) does not give submodules in the tar ...:(
3rd approach https://github.com/Kentzo/git-archive-all
Is outdated from my point of view by not being compatible to latest python 3.3 and still not fully working by using 2.7 because samefile complains.
So my question is now: Is there any recent way/approach to deal with exporting/archive a git project including submodules?
Or should I check subtrees for this workflow?
Thanks in advance
If you pass --recurse-submodules to the git clone command, it will automatically initialize and update each submodule in the repository, including nested submodules if any of the submodules in the repository have submodules themselves.
Under your repository name, click Settings. Under "Danger Zone", click Archive this repository or Unarchive this repository.
Yes, basically git-archive can create a zip/tarball of a specific revision and/or part of the tree, but does not retain history.
Git clone with submodules The list of steps required to clone a Git repository with submodules is: Issue a git clone command on the parent repository. Issue a git submodule init command. Issue a git submodule update command.
I'm using the following code
git archive -o release.zip HEAD
git submodule --quiet foreach 'cd $toplevel; zip -ru release.zip $sm_path'
to create a complete archive of a git repository with all submodules.
If you want to be fancy you can even rewrite the zip comment via
echo -e "Repository:\n$(git rev-parse HEAD)\nSubmodule status:\n$(git submodule status)" | zip -u release.zip -z
All on windows using infozip.
https://github.com/Kentzo/git-archive-all is now working under linux as @Kentzo stated.
In the cygwin environment (with git and python installed via cygwin installer) it works there too.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With