Да, вы можете определить метод расширения для типа struct / value. Однако они не имеют такого же поведения, как методы расширения для ссылочных типов.
Например, метод расширения GetA () в следующем коде C # получает копию структуры, а не ссылку на структуру. Это означает, что метод расширения C # в структуре не может изменять исходное содержимое структуры.
public static class TestStructExtensionMethods {public struct FooStruct {public int a; } public static int GetA (этот FooStruct st) {return st.a; }}
Чтобы изменить содержимое структуры, struct paramater нужно объявить как «ref». Тем не менее, «этот ref» не разрешен в C #. Самое лучшее, что мы можем сделать, это статический метод без расширения:
// это работает, но неэффективно, потому что он копирует весь FooStruct // просто для того, чтобы вернуть общедоступный статический int GetA ( ref FooStruct st) {return st.a; }
В VB.NET вы можете создать это как метод расширения структуры ByRef, чтобы он мог изменить исходную структуру:
'Это эффективно , поскольку ему передается ссылка на struct & lt; Extension () & gt; _ Public Sub GetA (ByRef [me] As FooStruct) As Integer Return [me] .a End Sub 'Можно изменить поля структуры, потому что у нас есть ref & lt; Extension () & gt; _ Public Sub SetA (ByRef [me] As FooStruct, newval As Integer) [me] .a = newval End Sub
Вы можете выполнить простую загрузку дерева каталогов:
git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
Но если вы хотите проверить это, и сможете совершать коммиты и отталкивать их, вы не можете этого сделать что.
Если directoy, который вы хотите загрузить, является разделенной библиотекой, лучше создать другое git-репо, а затем использовать функцию god subodule.
Конечно, вы должны быть владельцем начальное репо вы хотите
Я написал инструмент с Node.js только для этого. Проверьте Загрузите Repo Dir
install с npm i -g dl-repo-dir
и командой repo
будут доступны по всему миру.
repo download aztack/download-repo-dir lib src/lib/new-name
repo download aztack/download-repo-dir '' src/lib/download-repo-dir
export GITLAB_API_PRIVATE_TOKEN=YOUR_TOKEN_HERE
repo download gitlab:mygitlab.com:topgroup/subgroup/repo#v1.0.0 dir src/lib/new-name
и файл repo.json
сохранит всю информацию.
В новом проекте, вы можете инициализировать проект с помощью repo.json
с помощью команды repo init
.
Ни один из ответов не помог в моей ситуации. Если вы разрабатываете Windows, у вас, скорее всего, нет svn. Во многих ситуациях нельзя рассчитывать на то, что пользователи установили Git, или не хотят загружать целые хранилища по другим причинам. Некоторые из людей, которые ответили на этот вопрос, такие как Виллем ван Кетвич и азтак, сделали инструменты для решения этой задачи. Однако, если инструмент не написан для языка, который вы используете, или вы не хотите устанавливать стороннюю библиотеку, это не работает.
Однако есть гораздо более простой способ , GitHub имеет API, который позволяет загружать один файл или содержимое всего каталога с помощью запросов GET . Вы можете получить доступ к каталогу, используя https://api.github.com/repos/:owner/:repo_name/contents/:path
, который возвращает объект JSON, перечисляющий все файлы в каталоге. Параметр download_url
включен в перечисление - это ссылка на исходное содержимое файла. Затем файл можно загрузить с помощью этого URL.
Это двухэтапный процесс, который требует возможности делать запросы GET, но это может быть реализовано практически на любом языке на любой платформе. Его можно использовать для получения файлов или каталогов.
Я работаю с серверами CentOS 7, на которых у меня нет корневого доступа, ни git, svn и т. д. (и не хочу!), поэтому сделал скрипт python для загрузки любой папки github: https: // github .com / andrrrl / github-folder-downloader
Использование прост, просто скопируйте соответствующую часть из проекта github, предположим, что проект https://github.com / MaxCDN / php-maxcdn / , и вам нужна папка, в которой есть только некоторые исходные файлы, тогда вам нужно сделать что-то вроде:
$ python gdownload.py "/MaxCDN/php-maxcdn/tree/master/src" /my/target/dir/
(создаст целевую папку, если doesn ' t существует)
Он требует библиотеки lxml , может быть установлен с помощью easy_install lxml
. Если у вас нет доступа root (например, я), вы можете создать файл .pydistutils.py
в ваш $HOME
dir с этим содержимым:
[install]
user=1
И easy_install lxml
будет работать (ref: https://stackoverflow.com/a/33464597/591257 ).
Тот, кто работает над конкретной папкой, ему нужно клонировать эту конкретную папку, поэтому, пожалуйста, выполните следующие шаги ** --- с помощью SPARSE CHECKOUT --- **
Шаг 1: Создайте directory.
Шаг 2: Инициализируйте репозиторий Git. (git init
)
Шаг 3: Разрешить разреженные проверки. (git config core.sparsecheckout true
)
Шаг 4: Скажите Git, какие каталоги вы хотите (эхо 2015 / бренд / май (см. папку, в которую вы хотите работать) >> .git/info/sparse-checkout
)
Шаг 5: Добавить пульт (git remote add -f origin https://jafartke.com/mkt-imdev/DVM.git
)
Заключительный шаг 6: выборка файлов (git pull origin master
)
Если у вас есть svn
, вы можете использовать svn export
для этого:
svn export https://github.com/foobar/Test.git/trunk/foo
Обратите внимание на формат URL:
https://github.com/
/trunk
добавлено в конец Перед тем, как вы запустите svn export
, полезно сначала проверить содержимое каталога с помощью:
svn ls https://github.com/foobar/Test.git/trunk/foo
.git
. Вы можете использовать полную ссылку проекта и начать с использования svn ls
, а затем полный путь проекта. Пример: svn ls https://github.com/RobTillaart/Arduino.git
. Чтобы экспортировать только одну папку, вы просто добавляете /trunk
, а затем требуемый путь, например svn export https://github.com/RobTillaart/Arduino.git/trunk/libraries/DHTlib
. Легче сохранить путь проекта неповрежденным.
– jgrocha
21 February 2016 в 12:33
https://github.com/miguelgrinberg/python-socketio/tree/master/examples/wsgi
запустите svn export https://github.com/miguelgrinberg/python-socketio.git/trunk/examples/wsgi
. В текущем рабочем каталоге будет создан каталог с именем wsgi
. Только исходные файлы, ничего больше. Нет .git
, нет файлов, связанных с subversion.
– Rockallite
10 March 2017 в 08:20
Чтобы усилить ответы выше, реальным примером из реального репозитория GitHub для локального каталога будет:
svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces
svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces /temp/SvnExport/Washburn
Иногда конкретный пример помогает прояснить предложенные замены.
Если вы действительно просто хотите просто «загрузить» папку, а не «клонировать» ее (для разработки), самый простой способ просто получить копию самой последней версии репозитория ( и поэтому папка / файл внутри него), без необходимости клонирования всего репо или даже установки git в первую очередь, заключается в загрузке zip-архива (для любого репо, fork, branch, commit и т. д.), перейдя к желаемый репозиторий / fork / branch / commit на GitHub (например, http(s)://github.com/<user>/<repo>/commit/<Sha1>
для копии файлов, как и после определенного коммита) и выбора кнопки Downloads
рядом с верхним правом.
архивный формат не содержит никакой магии git-repo, только сами отслеженные файлы (и, возможно, несколько файлов .gitignore, если они были отслежены, но вы можете игнорировать их: p) - это означает, что если код изменится и вы хотите остаться наверху, вам придется вручную перезагрузить его, а это также означает, что вы не сможете использовать его в качестве репозитория git ...
Не уверен, что это то, что вы ищете ибо в этом случае (ага in, "download" / view vs "clone" / develop), но он может быть полезен тем не менее ...
tar.gz
: https://github.com/${owner}/${repo}/archive/${hash}.tar.gz
– Krisztian
12 August 2017 в 19:04
Расширение Chrome , Firefox Addon
Использование:
- На любой странице репозитория GitHub.
- Просто дважды щелкните нужные элементы.
- Нажмите кнопку загрузки внизу справа.
- См. панель мониторинга прогресса и дождитесь загрузки триггера браузера.
- Получить файл ZIP.
Получить токен:
- Нажмите значок GitZip Extension в вашем браузере.
- Нажмите ссылку «Обычный» или «Частный», кроме «Получить токен».
- Разрешить разрешение GitZip на странице авторизации Github.
- Вернуться на страницу репо начала.
- Продолжить использование.
Вариант 2: Github gh-страница
http://kinolien.github.io/ gitzip с использованием GitHub API и библиотек JSZip, FileSaver.js.
Шаг1: Введите github url в поле вверху справа. Шаг 2: нажмите клавишу ввода или щелкните скачать для загрузки zip напрямую или нажмите кнопку поиска, чтобы просмотреть список подпапок и файлов. Шаг 3. Нажмите кнопку «Загрузить файл Zip» или «Получить файл», чтобы получить файлы.
В большинстве случаев он работает нормально, за исключением того, что папка содержит более 1000 файлов из-за ограничений API Github Trees , (относится к Github API # Contents )
И он также может поддерживать приватные / публичные репозитории и обновлять ограничение скорости, если у вас есть учетная запись GitHub и использовать ссылку «get token» в этот сайт.
1.Щелкните по этой ссылке http://kinolien.github.io/gitzip/ 2. Вставьте ссылку на папку Github, которую вы хотите загрузить. 3.Щелкните в поиске, он отобразит все файлы для загрузки. Примечание: -Используя поиск, нет необходимости вводить ключ маркера;) .. держите его простым (y)
Чтобы экспортировать каталог из GitHub, замените «/ tree / master /» в URL-адрес каталога «/trunk/".
Например, чтобы экспортировать каталог со следующего URL-адреса:
https://github.com/liferay/liferay-plugins/tree/master/portlets/sample-hibernate-portlet
выполните следующую команду:
svn export https://github.com/liferay/liferay-plugins/trunk/portlets/sample-hibernate-portlet
Вы не можете; в отличие от Subversion, где каждый подкаталог может быть проверен отдельно, Git работает на основе целых репозиторий.
Для проектов, где необходим более мелкий доступ, вы можете использовать подмодули - каждый подмодуль является отдельным Git проект и, следовательно, может быть клонирован индивидуально.
Возможно, что интерфейс Git (например, веб-интерфейс GitHub или gitweb) может выбрать интерфейс для извлечения данной папки, но для мои знания никто из них не делает (хотя они позволяют загружать отдельные файлы, поэтому, если в папке не содержится слишком много файлов, это опция)
Edit - GitHub фактически предлагает доступ через SVN, что позволит вам сделать именно это (согласно комментарию). См. https://github.com/blog/1438-improved-svn-here-to-stay-old-svn-going-away для получения последних инструкций о том, как это сделать
Теперь вы можете СКАЧАТЬ DOWNLOAD или создать DOWNLOAD LINK для любого общего каталога или файла GitHub (особенно file ) из DownGit ! Простая демонстрация -
Вы также можете настроить подробное использование загруженного файла .
Обновление: сентябрь 2016 года: существует несколько инструментов, созданных сообществом, которые могут сделать это для вас:
Git не поддерживает это, но Github делает через SVN. Если вы проверите свой код с помощью subversion, Github по существу преобразует репо из git в subversion на бэкэнд, а затем обслуживает запрошенный каталог.
Вот как вы можете использовать эту функцию для загрузки определенной папки. В качестве примера я использую популярную библиотеку javascript lodash
.
/docs
из ветки master
, поэтому добавлю trunk/docs
. Полный URL-адрес теперь https://github.com/lodash/lodash/trunk/docs
. См. Мою заметку ниже для более подробного объяснения того, почему мы должны использовать этот формат URL.
svn checkout https://github.com/lodash/lodash/trunk/docs
Вы можете не видеть никакой активности сразу, потому что Github занимает до 30 секунд, чтобы конвертировать большие репозитории, поэтому будьте терпеливы.
Полное описание формата URL:
- Если вас интересует ветка
master
, вместо этого используйтеtrunk
. Таким образом, полный путьtrunk/foldername
- Если вас интересует ветка
foo
, вместо этого используйтеbranches/foo
. Полный путь выглядит какbranches/foo/foldername
- Protip: вы можете использовать
svn ls
для просмотра доступных тегов и ветвей перед загрузкой, если хотите. Это все! Github также поддерживает дополнительные функции subversion , включая поддержку для фиксации и нажатия изменений.
tree/master
на trunk
, и вы можете получить конкретную папку.
– Sérgio Michels
6 December 2013 в 19:18
tree/master
на trunk
. Эта информация должна быть добавлена в ответ.
– baptx
18 December 2013 в 19:25
svn export
, поскольку мне не нужна рабочая копия Subversion. Затем я добавил результирующую папку в Git. (Я как-то потерял большую часть моего дерева каталогов, поэтому я экспортировал из репо, которое я разветвил.)
– Grault
18 December 2013 в 20:34
branch
на branches
, который I think i> правильный; если нет, продолжайте и измените его.
– nick
20 October 2015 в 01:53
Если вам нужно сделать это программно, и вы не хотите полагаться на SVN, вы можете использовать API GitHub для рекурсивно загружать все содержимое.
Для вдохновения вот мой рубиновый смысл: https://gist.github.com/cvengros/b2a7e82f66519d423b6f
Это одно из немногих мест, где SVN лучше Git.
В итоге мы тяготели к трем вариантам:
Если вы хотите загружать файлы, не клонируйте репозиторий с историей, вы можете сделать это с помощью git-archive
.
git-archive
делает сжатый zip-архив или tar-архив репозитория git. Некоторые вещи, которые делают его особенным:
.git/
или любые неископанные файлы в репозитории, на которых он запущен. Пример создания архива docs/usage
из удаленного репо, с которым вы подключены с помощью ssh:
# in terminal
$ git archive --format tar --remote ssh://server.org/path/to/git HEAD docs/usage > /tmp/usage_docs.tgz
Дополнительная информация в в этом сообщении в блоге и git documentation .
Ничего плохого в других ответах, но я просто подумал, что поделюсь пошаговыми инструкциями для тех, кто блуждает по этому процессу в первый раз.
~ Чтобы открыть терминал, просто нажмите прожектор и введите терминал, затем нажмите enter
- . На Mac у вас, вероятно, уже есть SVN (для проверки только открытого терминала и типа «svn» или «which svn» ~ без меток кавычек)
- В Github: найдите путь Github в вашей папке git (а не в репо), нажав на конкретную имя папки в репо
- Скопируйте путь из адресной строки браузера
- Откройте терминал и введите: svn export
- Затем вставьте адрес (например, .): https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI
- Заменить слова: tree / master
- со словом: trunk
- Введите целевую папку для файлов (в этом примере я храню целевую папку insi de в папке «Загрузка» для текущего пользователя)
- Здесь пробел - это пробел, а не слово (пробел) ~ / Downloads / HeadsUpUI
- Последняя команда терминала показывает полную команду скачать папку (сравнить адрес с шагом 5) svn export https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI ~ / Downloads / HeadsUpUI
BTW. Если вы находитесь на Windows или какой-либо другой платформе, вы можете найти бинарную загрузку подрывной деятельности (svn) в http://subversion.apache.org
~ Если вы хотите проверить папку, а не просто загрузить ее, попробуйте использовать справку svn (tldr: replace export checkout)
Обновить
Относительно комментария при возобновлении прерывания загрузки / проверки. Я попробую запустить
svn cleanup
, а затемsvn update
. Пожалуйста, найдите SO для дополнительных опций.
Я использую linux так, поместите это в ~ / .bashrc, названный even: D $ HOME / .bashrc
git-dowloadfolder(){
a="$1"
svn checkout ${a/tree\/master/trunk}
}
, затем обновите оболочку с помощью
source ~/.bashrc
затем используйте его с git-downloadfolder blablabla: D
Я создал проект с открытым исходным кодом, названный GitHubFolderDownloader . Он позволяет загружать одну папку в репозиторий без клонирования или загрузки всего репозитория.
Существует пакет Python3 pip, называемый githubdl
, который может это сделать *:
export GIT_TOKEN=1234567890123456789012345678901234567890123
pip install githubdl
githubdl -u http://github.com/foobar/test -d foo
* Отказ от ответственности: я написал этот пакет.
Наша команда написала сценарий bash, чтобы сделать это, потому что мы не хотели устанавливать SVN на нашем сервере с пустыми костями.
https://github.com/ojbc/docker /blob/master/java8-karaf3/files/git-download.sh
Он использует API github и может запускаться из командной строки следующим образом:
git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs
Еще один конкретный пример:
Как я хочу загрузить папку «iOS Pro Geo» из URL
https://github.com/alokc83/APRESS- Books-Source-Code - / tree / master /% 20Pro% 20iOS% 20Geo
, и я могу сделать это через
svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
Обратите внимание на соединительную линию на пути
Отредактировано: (согласно комментарию Tommie C)
Да, использование экспорта вместо проверки даст чистую копию без дополнительных файлов репозитория git.
svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
Отредактировано: если дерево / мастер отсутствует в URL-адресе, то вилка его, и он будет там в Forked url.