Как мне клонировать только подкаталог Git-репозитория?

, чтобы получить атрибут из enum, я использую:

 public enum ExceptionCodes
 {
  [ExceptionCode(1000)]
  InternalError,
 }

 public static (int code, string message) Translate(ExceptionCodes code)
        {
            return code.GetType()
            .GetField(Enum.GetName(typeof(ExceptionCodes), code))
            .GetCustomAttributes(false).Where((attr) =>
            {
                return (attr is ExceptionCodeAttribute);
            }).Select(customAttr =>
            {
                var attr = (customAttr as ExceptionCodeAttribute);
                return (attr.Code, attr.FriendlyMessage);
            }).FirstOrDefault();
        }

// Используя

 var _message = Translate(code);
1220
задан Peter Mortensen 2 September 2016 в 19:21
поделиться

5 ответов

РЕДАКТИРОВАНИЕ : С Мерзавца 2.19, это наконец возможно, как видно в этом ответе: https://stackoverflow.com/a/52269934/2988.

Считают upvoting тем ответом.

Примечание: в Мерзавце 2.19, только реализована клиентская поддержка, поддержка серверной стороны все еще отсутствует, таким образом, она только работает при клонировании локальных репозиториев. Также обратите внимание, что крупный Мерзавец hosters, например, GitHub, на самом деле не используют сервер Мерзавца, они используют свою собственную реализацию, поэтому даже если поддержка обнаруживается в сервере Мерзавца, это автоматически не означает, что это работает над Мерзавцем hosters. (OTOH, так как они не используют сервер Мерзавца, они могли реализовать его быстрее в их собственных реализациях, прежде чем он обнаружится в сервере Мерзавца.)

<час>

нет, это не возможно в Мерзавце.

Реализация что-то вроде этого в Мерзавце было бы существенным усилием, и это будет означать, что целостность клиентского репозитория больше не могла гарантироваться. Если Вы интересно, ищете обсуждения "редкого клона" и "редкой выборки" на мерзавце mailinglist.

В целом, согласие в сообществе Мерзавца состоит в том, что, если у Вас есть несколько каталогов, которые всегда проверяются независимо, тогда они - действительно два различных проекта и должны жить в двух различных репозиториях. Можно склеить их назад вместе использование Подмодули Мерзавца .

538
ответ дан getThingsDone 3 September 2016 в 05:21
поделиться

Если Вы никогда не планируете взаимодействовать с репозиторием, из которого Вы клонировались, можно сделать полное клон мерзавца и переписать репозиторий с помощью ответвление фильтра мерзавца - фильтр подкаталога . Таким образом, по крайней мере, история будет сохранена.

71
ответ дан udondan 3 September 2016 в 05:21
поделиться

Я записал .gitconfig [alias] для выполнения "редкого контроля". Проверьте его (никакая предназначенная игра слов):

В Windows, запущенном в cmd.exe

git config --global alias.sparse-checkout "!f(){ [ $# -eq 2 ] && L=${1##*/} L=${L%.git} || L=$2; mkdir -p \"$L/.git/info\" && cd \"$L\" && git init --template= && git remote add origin \"$1\" && git config core.sparseCheckout 1; [ $# -eq 2 ] && echo \"$2\" >> .git/info/sparse-checkout || { shift 2; for i; do echo $i >> .git/info/sparse-checkout; done }; git pull --depth 1 origin master;};f"

Иначе:

git config --global alias.sparse-checkout '!f(){ [ $# -eq 2 ] && L=${1##*/} L=${L%.git} || L=$2; mkdir -p "$L/.git/info" && cd "$L" && git init --template= && git remote add origin "$1" && git config core.sparseCheckout 1; [ $# -eq 2 ] && echo "$2" >> .git/info/sparse-checkout || { shift 2; for i; do echo $i >> .git/info/sparse-checkout; done }; git pull --depth 1 origin master;};f'

Использование :

# Makes a directory ForStackExchange with Plug checked out
git sparse-checkout https://github.com/YenForYang/ForStackExchange Plug

# To do more than 1 directory, you have to specify the local directory:
git sparse-checkout https://github.com/YenForYang/ForStackExchange ForStackExchange Plug Folder

git config команды 'уменьшены' для удобства и устройства хранения данных, но вот расширенный псевдоним:

# Note the --template= is for disabling templates.
# Feel free to remove it if you don't have issues with them (like I did)
# `mkdir` makes the .git/info directory ahead of time, as I've found it missing sometimes for some reason
f(){
    [ "$#" -eq 2 ] && L="${1##*/}" L=${L%.git} || L=$2;
    mkdir -p "$L/.git/info"
        && cd "$L"
        && git init --template=
        && git remote add origin "$1"
        && git config core.sparseCheckout 1;
    [ "$#" -eq 2 ]
        && echo "$2" >> .git/info/sparse-checkout
        || {
            shift 2;
            for i; do
                echo $i >> .git/info/sparse-checkout;
            done
        };
    git pull --depth 1 origin master;
};
f
1
ответ дан 19 December 2019 в 20:15
поделиться

Использование Linux? И только хотите легкий получить доступ и убрать рабочее дерево? не беспокоя отдых кода Вашей машины. попробуйте символьные ссылки !

git clone https://github.com:{user}/{repo}.git ~/my-project
ln -s ~/my-project/my-subfolder ~/Desktop/my-subfolder

Тест

cd ~/Desktop/my-subfolder
git status
1
ответ дан 19 December 2019 в 20:15
поделиться

Git 1.7.0 имеет «разреженные проверки». Видеть «Core.sparseCheckout» в git config справочной странице , «Редкая проверка» в git read-tree справочной странице и «Пропустить бит рабочего дерева» на странице руководства git update-index .

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

63
ответ дан 19 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

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