Есть ли «git export» (как «svn export»)?

Почему бы не сделать это?

def filt_spec(df, col, val, op):
    import operator
    ops = {'eq': operator.eq, 'neq': operator.ne, 'gt': operator.gt, 'ge': operator.ge, 'lt': operator.lt, 'le': operator.le}
    return df[ops[op](df[col], val)]
pandas.DataFrame.filt_spec = filt_spec

Демонстрация:

df = pd.DataFrame({'a': [1,2,3,4,5], 'b':[5,4,3,2,1]})
df.filt_spec('a', 2, 'ge')

Результат:

   a  b
 1  2  4
 2  3  3
 3  4  2
 4  5  1

Вы можете видеть, что столбец 'a' был отфильтрован, где a> = 2.

Это немного быстрее (время ввода, а не производительность), чем цепочка операторов. Конечно, вы могли бы поставить импорт в верхнюю часть файла.

2281
задан Peter O. 21 November 2016 в 14:31
поделиться

9 ответов

Вероятно, самый простой способ достигнуть этого с git archive . При реальной необходимости просто в расширенном дереве, можно сделать что-то вроде этого.

git archive master | tar -x -C /somewhere/else

Большую часть времени, что я должен 'экспортировать' что-то от мерзавца, я хочу сжатый архив в любом случае, таким образом, я делаю что-то вроде этого.

git archive master | bzip2 >source-tree.tar.bz2

архив ZIP:

git archive --format zip --output /full/path/to/zipfile.zip master 

git help archive для получения дополнительной информации, это довольно гибко.

<час>

знать, что даже при том, что архив не будет содержать .git каталог, он будет, однако, содержать другие скрытые определенные для мерзавца файлы как .gitignore, .gitattributes, и т.д. Если Вы не захотите их в архиве, удостоверьтесь, что Вы используете экспорт - игнорируют атрибут в .gitattributes файле и фиксируют это прежде, чем сделать Ваш архив. Read больше...

<час>

Примечание: Если Вы интересуетесь экспортом индекса, команда

git checkout-index -a -f --prefix=/destination/path/

(См. ответ Greg для получения дополнительной информации)

2330
ответ дан Jean-François Corbett 21 November 2016 в 14:31
поделиться
  • 1
    Если Вы вводите явный бросок NSUInteger к unsigned long, но изменяете его на NSInteger, Вы получаете неправильное поведение для отрицательных величин без предупреждений. @(), как гарантируют, будет работать во всех случаях. – ilya n. 3 December 2013 в 22:03

Я записал простую обертку [приблизительно 111], что можно использовать как это:

git export ~/the/destination/dir

, Если целевой каталог уже существует, необходимо будет добавить -f или --force.

Установка проста; просто отбросьте сценарий где-нибудь в Вашем PATH и удостоверьтесь, что это - исполняемый файл.

репозиторий GitHub для git-export

38
ответ дан Daniel Schierbeck 21 November 2016 в 14:31
поделиться

От Руководство Мерзавца:

Используя индекс контроля мерзавца для "экспорта всего дерева"

способность к префиксу в основном делает его тривиальным для использования индекса контроля мерзавца в качестве "экспорта как древовидная" функция. Просто считайте желаемое дерево в индекс и сделайте:

$ git checkout-index --prefix=git-export-dir/ -a

40
ответ дан jperras 21 November 2016 в 14:31
поделиться
  • 1
    Это - обходное решение а не решение. Правильное решение выше: используйте NSObject в качестве части определения протокола. – phatmann 2 April 2013 в 18:49

Я узнал то, что означает опция 2. Из репозитория можно сделать:

git checkout-index -a -f --prefix=/destination/path/

наклонная черта в конце пути важна, иначе это приведет к файлам, находящимся в / месте назначения с префиксом 'пути'.

С тех пор в нормальной ситуации индекс содержит содержание репозитория, нет ничего специального, чтобы сделать для "чтения желаемого дерева в индекс". Это уже там.

Эти -a флаг требуется, чтобы проверять все файлы в индексе (я не уверен, что это означает опускать этот флаг в этой ситуации, так как это не делает то, что я хочу). -f силы флага, перезаписывающие любые существующие файлы в выводе, который обычно не делает эта команда.

Это, кажется, вид "экспорта мерзавца", я искал.

314
ответ дан etarion 21 November 2016 в 14:31
поделиться

Мое предпочтение должно было бы на самом деле иметь цель dist в Вашем Make-файле (или другая система сборки), который экспортирует распространяемый архив Вашего кода (.tar.bz2, .zip, .jar, или независимо от того, что является соответствующим). Если Вы, оказывается, используете автоинструменты GNU или системы MakeMaker Perl, я думаю, что это существует для Вас автоматически. В противном случае я настоятельно рекомендую добавление его.

ЭТА (2012-09-06): Ничего себе, резкий downvotes. Я все еще полагаю, что лучше создать Ваши дистрибутивы с Вашими инструментами сборки, а не Вашим инструментом управления исходным кодом. Я верю в создание артефактов с инструментами сборки. В моем текущем задании наш основной продукт создается с целевым объектом Ant. Мы посреди переключения систем управления исходным кодом, и присутствие этого целевого объекта Ant означает тот меньше стычки в миграции.

6
ответ дан skiphoppy 21 November 2016 в 14:31
поделиться

git archive также работы с удаленным репозиторием.

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master | tar -xf -

Для экспорта конкретного пути в repo добавляют столько путей, сколько Вы желаете как последний аргумент мерзавцу, например:

git archive --format=tar \
--remote=ssh://remote_server/remote_repository master path1/ path2/ | tar -xv
252
ответ дан Aleksandr Somov 22 November 2016 в 00:31
поделиться

Похоже, это меньшая проблема для Git, чем для SVN. Git помещает только папку .git в корень репозитория, тогда как SVN помещает папку .svn в каждый подкаталог. Таким образом, "svn export" избегает рекурсивной магии командной строки, тогда как с Git рекурсия не требуется.

36
ответ дан 22 November 2019 в 19:55
поделиться

Мне это было нужно для сценария развертывания, и я не мог использовать ни один из вышеупомянутых подходов. Вместо этого я придумал другое решение:

#!/bin/sh
[ $# -eq 2 ] || echo "USAGE $0 REPOSITORY DESTINATION" && exit 1
REPOSITORY=$1
DESTINATION=$2
TMPNAME="/tmp/$(basename $REPOSITORY).$$"
git clone $REPOSITORY $TMPNAME
rm -rf $TMPNAME/.git
mkdir -p $DESTINATION
cp -r $TMPNAME/* $DESTINATION
rm -rf $TMPNAME
4
ответ дан 22 November 2019 в 19:55
поделиться

Делаем это простым способом, это функция для .bash_profile, она напрямую распаковывает архив в текущее местоположение, настройте сначала ваш обычный [url:path]. ПРИМЕЧАНИЕ: С помощью этой функции вы избегаете операции клонирования, она получает архив непосредственно из удаленного репозитория.

gitss() {
    URL=[url:path]

    TMPFILE="`/bin/tempfile`"
    if [ "$1" = "" ]; then
        echo -e "Use: gitss repo [tree/commit]\n"
        return
    fi
    if [ "$2" = "" ]; then
        TREEISH="HEAD"
    else
        TREEISH="$2"
    fi
    echo "Getting $1/$TREEISH..."
    git archive --format=zip --remote=$URL/$1 $TREEISH > $TMPFILE && unzip $TMPFILE && echo -e "\nDone\n"
    rm $TMPFILE
}

Псевдоним для .gitconfig, требуется та же конфигурация (будьте осторожны, выполняя команду внутри .git-проектов, она ВСЕГДА перепрыгивает на базовый каталог ранее как сказано здесь, пока это не исправлено, я лично предпочитаю функцию

ss = !env GIT_TMPFILE="`/bin/tempfile`" sh -c 'git archive --format=zip --remote=[url:path]/$1 $2 \ > $GIT_TMPFILE && unzip $GIT_TMPFILE && rm $GIT_TMPFILE' -
4
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: