Есть ли "git export" (например, "svn export")? - PullRequest
2263 голосов
/ 02 октября 2008

Мне было интересно, есть ли хорошее решение "git export", которое создает копию дерева без каталога репозитория .git. Есть как минимум три метода, о которых я знаю:

  1. git clone с последующим удалением каталога репозитория .git.
  2. git checkout-index ссылается на эту функцию, но начинается с «Просто прочитайте нужное дерево в индекс ...», что я не совсем уверен, как это сделать.
  3. git-export - это сторонний скрипт, который, по сути, git clone отправляет во временное местоположение, за которым следует rsync --exclude='.git' в конечный пункт назначения.

Ни одно из этих решений не кажется мне удовлетворительным. Наиболее близким к svn export может быть вариант 1, потому что оба требуют, чтобы целевой каталог был пустым в первую очередь. Но вариант 2 кажется еще лучше, если предположить, что я могу понять, что значит читать дерево в индексе.

Ответы [ 31 ]

1 голос
/ 22 мая 2014

У меня есть следующая служебная функция в моем файле .bashrc: она создает архив текущей ветки в репозитории git.

function garchive()
{
  if [[ "x$1" == "x-h" || "x$1" == "x" ]]; then
    cat <<EOF
Usage: garchive <archive-name>
create zip archive of the current branch into <archive-name>
EOF
  else
    local oname=$1
    set -x
    local bname=$(git branch | grep -F "*" | sed -e 's#^*##')
    git archive --format zip --output ${oname} ${bname}
    set +x
  fi
}
...