как клонировать все удаленные ветки в git?

<p>у меня есть <code>master</code> и <code>development</code> ветвь, оба помещены в <a href="http://en.wikipedia.org/wiki/github">github</a> . у меня есть <code>clone</code>d, <code>pull</code>ed и <code>fetch</code>ed, но я не могу получить ничего, кроме ответвления <code>master</code>.</p><p>я уверен, что упускаю что-то очевидное, но я прочитал руководство и совсем не радуюсь.</p>

<p>сначала клонируйте удаленный <a href="http://en.wikipedia.org/wiki/git\_%28software%29">git</a> репозиторий и <a href="http://en.wikipedia.org/wiki/cd\_%28command%29">cd</a> в него:</p><pre><code>$ git clone git://example.com/myproject $ cd myproject </code></pre><p>далее, посмотрите на локальные ветки в вашем хранилище:</p><pre><code>$ git branch  master но есть другие ветки, скрывающиеся в вашем хранилище! вы можете увидеть их, используя флаг -a:$ git branch -a * master remotes/origin/head remotes/origin/master remotes/origin/v1.0-stable remotes/origin/experimental </code></pre><p>если вы просто хотите быстро взглянуть на ветку upstream, вы можете проверить это непосредственно:</p><pre><code>$ git checkout origin/experimental но если вы хотите работать с этой веткой, вам нужно создать локальную ветку отслеживания, которая выполняется автоматически:$ git checkout experimental </code></pre><p>и ты увидишь</p><pre><code>branch experimental set up to track remote branch experimental from origin. switched to a new branch 'experimental' </code></pre><p>эта последняя строка бросает некоторых людей: «новая ветвь» - да? что действительно означает, что ветка взята из индекса и создана для вас локально. строка <em>previous</em> на самом деле более информативна, так как сообщает, что ветка настраивается для отслеживания удаленной ветки, что обычно означает ветку origin/branch\_name </p><p>теперь, если вы посмотрите на свои местные филиалы, вот что вы увидите:</p><pre><code>$ git branch  experimental master вы можете отслеживать несколько удаленных репозиториев, используя git remote.$ git remote add win32 git://example.com/users/joe/myproject-win32-port $ git branch -a  master remotes/origin/head remotes/origin/master remotes/origin/v1.0-stable remotes/origin/experimental remotes/win32/master remotes/win32/new-widgets на этом этапе все становится довольно сумасшедшим, поэтому запустите gitk, чтобы увидеть, что происходит:$ gitk --all & </code></pre>

<p>если у вас есть много удаленных веток, которые вы хотите получить сразу, выполните:</p><pre><code>$ git pull --all теперь вы можете оформить любую ветку, как вам нужно, не обращаясь к удаленному хранилищу.

этот <a href="http://en.wikipedia.org/wiki/bash_%28unix_shell%29">bash скрипт помог мне:#!/bin/bash for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?head|master)$'); do git branch --track "${branch##*/}" "$branch" done он создаст ветви отслеживания для всех удаленных ветвей, кроме главной (которую вы, вероятно, получили из оригинальной команды клонирования). я думаю, вам все еще нужно сделать git fetch --all git pull --all чтобы быть уверенным.<blockquote> <strong>one liner</strong>: git branch -a | grep -v head | perl -ne 'chomp($\_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2n)} else {$d{$_}=1}' | csh -xfs как обычно: протестируйте в своей настройке перед копированием rm -rf universe, как мы его знаем  кредиты на однострочник переходят на пользователя cfi </blockquote>

использование параметра --mirror, по-видимому, правильно копирует ветви отслеживания remote . однако он устанавливает репозиторий как пустой репозиторий, поэтому впоследствии вам придется превратить его в обычный репозиторий.git clone --mirror path/to/original path/to/dest/.git cd path/to/dest git config --bool core.bare false git checkout anybranch ссылка: <a href="https://git.wiki.kernel.org/index.php/git_faq#how_do_i_clone_a_repository_with_all_remotely_tracked_branches.3f">git faq: как мне клонировать репозиторий со всеми удаленно отслеживаемыми ветками? 

вы можете легко переключиться на ветку, не используя причудливый синтаксис "git checkout -b somebranch origin/somebranch". вы можете просто сделать:git checkout somebranch git автоматически сделает правильные вещи:$ git checkout somebranch branch somebranch set up to track remote branch somebranch from origin. switched to a new branch 'somebranch' </code></pre><p>git проверит, существует ли ветка с таким же именем на одном и том же удаленном компьютере, и если это так, она отслеживает ее так же, как если бы вы явно указали, что это удаленная ветка. из справочной страницы git-checkout git 1.8.2.1:</p><blockquote> <p>если <branch> не найден, но в .\_\_ существует ветвь отслеживания. ровно один пульт (назовите его <remote>) с соответствующим именем, рассматривайте как эквивалентно</p> <pre><code>$ git checkout -b <branch> --track <remote>/<branch>  </blockquote>

что касается,<blockquote> $ git checkout -b экспериментальная происхождение/экспериментальная</p> </blockquote><p>с помощью</p><pre><code>$ git checkout -t origin/experimental или более многословный, но легче запомнить$ git checkout --track origin/experimental </code></pre><p>может быть лучше, с точки зрения отслеживания удаленного хранилища. </p>

<p>выборка, которую вы делаете, должна получить все удаленные ветви, но она не создаст для них локальные ветви. если вы используете gitk, вы должны увидеть удаленные ветви, описанные как «remotes/origin/dev» или что-то подобное.</p><p>чтобы создать локальную ветвь на основе удаленной ветки, сделайте что-то вроде:</p><pre>git checkout -b dev refs/remotes/origin/dev</pre><p>который должен вернуть что-то вроде:</p><pre>ветвь dev настроена для отслеживания удаленной ветки refs/remotes/origin/dev . переключена на новую ветку "dev"</pre><p>теперь, когда вы находитесь в ветке dev, "git pull" обновит ваш локальный dev до той же точки, что и удаленная ветка dev. обратите внимание, что он будет извлекать все ветви, но только тянуть ту, на которой вы находитесь, к вершине дерева.</p>

<p>когда вы делаете «git clone git: // location», все ветки и теги выбираются.</p><p>чтобы работать поверх определенной удаленной ветви, предполагая, что это удаленный источник:</p><pre><code>git checkout -b branch origin/branchname </code></pre>

<p>используйте псевдонимы. хотя в git нет ни одной нули, вы можете определить свою собственную как</p><pre><code>git config --global alias.clone-branches '! git branch -a | sed -n "/\/head /d; /\/master$/d; /remotes/p;" | xargs -l1 git checkout -t' а затем использовать его какgit clone-branches 

это не слишком сложно, очень простые и понятные шаги заключаются в следующем;git fetch origin это приведет все удаленные филиалы к вашему локальному.git branch -a это покажет вам все удаленные ветви.git checkout --track origin/<branch you want to checkout>проверьте, находитесь ли вы в нужной ветке, с помощью следующей команды;git branch вывод понравится;your current branch some branch2 some branch3 обратите внимание на знак , который обозначает текущую ветвь.

почему вы видите только «мастер»git clone загружает все удаленные удаленные ветви, но все равно считает их «удаленными», даже если файлы находятся в вашем новом хранилище. есть одно исключение, которое заключается в том, что процесс клонирования создает локальную ветвь с именем «master» из удаленной ветки с именем «master». по умолчанию git branch показывает только локальные ветви, поэтому вы видите только «master».git branch -a показывает все ветви, включая удаленные ветви.как получить местные филиалыесли вы действительно хотите работать с веткой, вам, вероятно, понадобится ее «локальная» версия. чтобы просто создавать локальные ветки из удаленных веток (не проверяя их и, тем самым, не изменяя содержимое вашего рабочего каталога), вы можете сделать это следующим образом:git branch branchone origin/branchone git branch branchtwo origin/branchtwo git branch branchthree origin/branchthree в этом примере branchone - это имя локальной ветви, которую вы создаете на основе origin/branchone; если вместо этого вы хотите создать локальные ветви с разными именами, вы можете сделать это:git branch localbranchname origin/branchone создав локальную ветвь, вы можете увидеть ее с помощью git branch (помните, вам не нужен -a для просмотра локальных ветвей).

лучше поздно, чем никогда, но вот лучший способ сделать это:mkdir repo cd repo git clone --bare path/to/repo.git .git git config --unset core.bare git reset --hard на данный момент у вас есть полная копия удаленного репо со всеми его ветками (проверьте с помощью git branch). вы можете использовать --mirror вместо --bare, если в вашем удаленном репо есть свои пульты.

просто сделай это:$ git clone git://example.com/myproject $ cd myproject $ git checkout branchxyz branch branchxyz set up to track remote branch branchxyz from origin. switched to a new branch 'branchxyz' $ git pull already up-to-date. $ git branch * branchxyz master $ git branch -a  branchxyz master remotes/origin/head -> origin/master remotes/origin/branchxyz remotes/origin/branch123 видите ли, 'git clone git: //example.com/myprojectt' выбирает все, даже ветви, вам просто нужно их оформить, тогда будет создана ваша локальная ветка.

вам нужно всего лишь использовать "git clone", чтобы получить все ветки.git clone <your_http_url> даже если вы видите только ветку master, вы можете использовать «git branch -a», чтобы увидеть все ветви.git branch -a и вы можете переключиться на любую ветку, которая у вас уже есть.git checkout <your_branch_name> не беспокойтесь, что после «git clone» вам не нужно подключаться к удаленному репо, «git branch -a» и «git checkout» могут быть успешно запущены при закрытии вашего wifi. итак, доказано, что когда вы делаете «git clone», он уже скопировал все ветви из удаленного репо. после этого вам не нужно удаленное репо, ваш локальный уже имеет коды всех филиалов. 

git clone должен копировать весь репозиторий. попробуйте клонировать его, а затем запустите git branch -a. следует перечислить все ветви. если затем вы хотите переключиться на ветку "foo" вместо "master", используйте git checkout foo.

используйте мой инструмент <a href="http://programblings.com/2008/08/06/time-to-git-collaborating-with-git_remote_branch/">git_remote_branch (на вашем компьютере должен быть установлен ruby). он создан специально для упрощения работы с удаленными ветвями.каждый раз, когда он выполняет операцию от вашего имени, он печатает его красным на консоли. со временем они наконец втыкаются в ваш мозг :-)если вы не хотите, чтобы grb запускал команды от вашего имени, просто используйте функцию объяснения. команды будут напечатаны на вашей консоли, а не выполнены для вас.наконец, все команды имеют псевдонимы для упрощения запоминания.обратите внимание, что это <a href="http://programblings.com/2008/08/06/time-to-git-collaborating-with-git_remote_branch/">альфа-программа ;-)вот справка, когда вы запускаете grb help: git_remote_branch версия 0.2.6 использование: grb создать имя_сервера [origin_server] grb publish branch_name [origin_server] grb переименовать имя_сервера [origin_server] grb удалить имя_сервера [origin_server] grb-трек имя_сервера [origin_server] заметки: - если origin_server не указан, предполагается, что имя «origin» (git по умолчанию) - функция переименования переименовывает текущую ветку мета-команда объяснения: вы также можете добавить любую команду к ключевому слову вместо выполнения команды git_remote_branch просто выведет список команд, которые вам нужно выполнить для достижения этой цели . пример: grb объяснить создать grb объяснять создать my_branch github все команды также имеют псевдонимы: создать: создать, новый удалить: удалить, уничтожить, убить, удалить, .m публиковать: публиковать, remotize переименовать: переименовать, р-н, мв, двигаться отслеживать: отслеживать, следовать, захватывать, получать 

все ответы, которые я здесь видел, действительны, но есть гораздо более чистый способ клонировать репозиторий и вытащить все ветви одновременно. когда вы клонируете репозиторий, вся информация о ветвях фактически загружается, но ветви скрыты. с помощью команды$ git branch -a </code></pre><p>вы можете показать все ветви хранилища, и с помощью команды</p><pre><code>$ git checkout -b branchname origin/branchname затем вы можете «загрузить» их вручную по одному. однако, когда вы хотите клонировать репо с большим количеством веток, все вышеприведенные способы являются длительными и утомительными в отношении гораздо более чистого и быстрого способа, который я собираюсь показать, хотя и немного сложного. вам нужно три шага для этого: первый шаг создайте новую пустую папку на вашем компьютере и клонируйте зеркальную копию папки .git из репозитория:$ cd ~/desktop && mkdir my\_repo\_folder && cd my\_repo\_folder $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git локальный репозиторий внутри папки my_repo_folder по-прежнему пуст, теперь есть только скрытая папка .git, которую вы можете увидеть с помощью команды "ls -alt" из терминала.<ol start="2"> второй шаг переключите этот репозиторий из пустого (пустого) репозитория в обычный репозиторий, переключив логическое значение «bare» конфигурации git на false:$ git config --bool core.bare false </code></pre><ol start="3"> <li>третий шаг</li> </ol><p>возьмите все, что находится внутри текущей папки, и создайте все ветви на локальном компьютере, поэтому сделайте это обычным репо. </p><pre><code>$ git reset --hard теперь вы можете просто набрать команду «git branch» и увидеть, что все ветви загружены. это быстрый способ, которым вы можете клонировать git-репозиторий со всеми ветками одновременно, но это не то, что вы хотите сделать для каждого отдельного проекта таким образом. 

глядя на один из ответов на вопрос, я заметил, что его можно сократить:for branch in git branch -r | grep -v 'head|master'; do git branch --track ${branch##*/} $branch; done но будьте осторожны, если одна из удаленных ветвей называется, например, admin_master это не будет загружено!спасибо bigfish за оригинальную идею

<strong>ok,</strong> когда вы клонируете репо, у вас там есть все ветки ...если вы просто делаете git branch, они вроде как скрыты ...так что, если вы хотите увидеть название всех ветвей, просто добавьте флаг --all так:git branch --all или git branch -aесли вы просто оформите заказ в филиале, вы получите все, что вам нужно.но как быть, если ветка, созданная кем-то другим после вас, клонируется?в этом случае просто сделайте:git fetchи проверьте все ветви снова ...если вы хотите получить и оформить заказ одновременно, вы можете сделать:git fetch && git checkout your_branch_nameтакже создал изображение ниже для вас, чтобы упростить то, что я сказал: <a href="https://i.stack.imgur.com/gn2pi.png"> <img src="https://i.stack.imgur.com/gn2pi.png" alt="git branch --all to get all branches">  

клонирование из локального репозитория не будет работать с git clone и git fetch: многие ветви/теги останутся незатронутыми.получить клон со всеми ветками и тегами.git clone --mirror git://example.com/myproject myproject-local-bare-repo.git чтобы получить клон со всеми ветками и тегами, а также с рабочей копией:git clone --mirror git://example.com/myproject myproject/.git cd myproject git config --unset core.bare git config receive.denycurrentbranch updateinstead git checkout master 

#!/bin/bash for branch in git branch -a | grep remotes | grep -v head | grep -v master ; do git branch --track ${branch#remotes/origin/} $branch done этот код перетянет все удаленные ветки в локальный репозиторий.

для копирования-вставки в командную строку:git checkout master ; remote=origin ; for brname in git branch -r | grep $remote | grep -v master | grep -v head | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -d $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master </code></pre><p>для большей читаемости:</p><pre><code>git checkout master ; remote=origin ; for brname in ` git branch -r | grep $remote | grep -v master | grep -v head | awk '{gsub(/^[^/]+//,"",$1); print $1}' ; do git branch -d $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master  это будет: проверить мастер (чтобы мы могли удалить ветку, в которой мы находимся) <strong>выберите пульт</strong>, чтобы оформить заказ (измените его на тот, который у вас есть) <strong>перебрать все ветви</strong> пульта дистанционного управления, кроме master и head  <strong>delete</strong> локальная ветвь (чтобы мы могли проверить принудительно обновленные ветки) <strong>проверить</strong> ветку с пульта  проверить мастер (ради этого) на основании <a href="https://stackoverflow.com/a/6300386/1998046">ответа из <a href="https://stackoverflow.com/users/6309/vonc">vonc .

я написал эту небольшую функцию <strong>powershell</strong>, чтобы иметь возможность извлекать все мои ветки git, находящиеся на удаленном сервере origin.function git-getallremotebranches { iex "git branch -r" <# get all remote branches #>  | % { $\_ -match "origin\/(?'name'\s+)" } <# select only names of the branches #> ` | % { out-null; $matches['name'] } <# write does names #> } function git-checkoutallbranches { git-getallremotebranches  | % { iex "git checkout $\_" } <# execute ' git checkout <branch>' #> } </code></pre><p>другие функции git можно найти на <a href="https://github.com/aburok/mysettings/blob/master/powershell/config/git-alias.ps1">мой репозиторий git settings</a> </p>

<p>мне нужно было сделать то же самое. вот мой <a href="http://en.wikipedia.org/wiki/ruby\_%28programming\_language%29">ruby</a> скрипт.</p><pre><code>#!/usr/bin/env ruby local = [] remote = {} # prepare %x[git reset --hard head] %x[git checkout master] # makes sure that * is on master. %x[git branch -a].each\_line do |line| line.strip! if /origin\//.match(line) remote[line.gsub(/origin\//, '')] = line else local << line end end # update remote.each\_pair do |loc, rem| next if local.include?(loc) %x[git checkout --track -b #{loc} #{rem}] end %x[git fetch] </code></pre>

<p>git обычно (если не указан) извлекает все ветки и/или теги (ссылки, см .: <code>git ls-refs</code>) из одного или нескольких других хранилищ вместе с объектами, необходимыми для завершения их истории. другими словами, он выбирает объекты, которые доступны объектам, которые уже загружены. смотрите: <a href="https://stackoverflow.com/a/36243207/55075">что на самом деле делает <code>git fetch</code>?</a> </p><p>иногда у вас могут быть ветки/теги, которые не связаны напрямую с текущим, поэтому <code>git pull --all</code><strong><code>git fetch --all</code> в этом случае не поможет, но вы можете перечислить их следующим образом:</p><pre><code>git ls-remote -h -t origin </code></pre><p>и получить их вручную, зная имена ссылок.</p><p>итак, чтобы \_/получить их все</strong>, попробуйте:</p><pre><code>git fetch origin --depth=10000 $(git ls-remote -h -t origin) параметр --depth=10000 может помочь, если вы зашли в хранилище.затем проверьте все свои ветви снова:git branch -avv если вышеприведенное не поможет, вам нужно вручную добавить недостающие ветви в отслеживаемый список (так как они как-то потерялись):$ git remote -v show origin ... remote branches: master tracked </code></pre><p>по <code>git remote set-branches</code> вроде:</p><pre><code>git remote set-branches --add origin missing\_branch </code></pre><p>поэтому он может появиться под <code>remotes/origin</code> после получения:</p><pre><code>$ git remote -v show origin ... remote branches: missing_branch new (next fetch will store in remotes/origin) $ git fetch from github.com:foo/bar * [new branch] missing\_branch -> origin/missing\_branch </code></pre><hr><h3>поиск проблемы</h3><p>если вы все еще не можете получить ничего, кроме основной ветки, проверьте следующее:</p><ul> <li>дважды проверьте ваши пульты (<code>git remote -v</code>), например, . <ul> <li>убедитесь, что <code>git config branch.master.remote</code> является <code>origin</code>.</li> <li>проверьте, указывает ли <code>origin</code> на правильный url-адрес с помощью: <code>git remote show origin</code> (см. этот <a href="https://stackoverflow.com/q/5243231/55075">post</a> ).</li> </ul></li> </ul>

<p>по состоянию на начало 2017 года ответ <a href="https://stackoverflow.com/questions/67699/how-to-clone-all-remote-branches-in-git#comment2170694\_72156">в этом комментарии</a> работает:</p><p><code>git fetch <origin-name> <branch-name></code> останавливает ветку для вас. хотя это не вытягивает все ветви одновременно, вы можете выполнять эту ветвь по отдельности.</p>

<p>ни один из этих ответов не урезал его, кроме того, что никто не находится на правильном пути.</p><p>у меня были проблемы с перемещением репо с одного сервера/системы на другой. когда я клонировал репозиторий, он только создал локальную ветвь для мастера, поэтому, когда я отправлял на новый удаленный сервер, была перемещена только основная ветвь.</p><p>таким образом, я нашел эти два метода очень полезными. надеюсь, они помогут кому-то еще.</p><p><strong> метод 1: </strong></p><pre><code>git clone --mirror old\_repo\_url cd new-cloned-project mkdir .git mv * .git git config --local --bool core.bare false git reset --hard head git remote add newrepo new\_repo\_url git push --all newrepo git push --tags newrepo </code></pre><p><strong> метод 2: </strong></p><pre><code>git config --global alias.clone-branches '! git branch -a | sed -n "/\/head /d; /\/master$/d; /remotes/p;" | xargs -l1 git checkout -t' git clone old_repo_url cd new-cloned-project git clone-branches git remote add newrepo new_repo_url git push --all newrepo git push --tags newrepo 

используйте команды, которые вы можете запомнитья использую bitbucket, службу хостинга репозитория atlassian. поэтому я стараюсь следовать их документам. и это прекрасно работает для меня. с помощью следующих простых и коротких команд вы можете оформить удаленную ветку.сначала клонируйте свой репозиторий, затем перейдите в папку назначения. и последнее, но не менее важное: выборка и проверка:git clone  <destination_folder> cd <destination_folder> git fetch && git checkout <branch> вот и все. вот немного более реальный пример:git clone https://username@bitbucket.org/team/repository.git project_folder cd project_folder git fetch && git checkout develop подробную информацию о командах вы найдете в документации: <a href="https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-clone">команда клонирования , <a href="https://www.atlassian.com/git/tutorials/syncing/git-fetch">команда извлечения , <a href="https://www.atlassian.com/git/tutorials/undoing-changes/git-checkout/">команда извлечения 

вот еще одна короткая однострочная команда, которая создает локальные ветви для всех удаленных веток:(git branch -r | sed -n '/->/!s#^ origin/##p' && echo master) | xargs -l1 git checkout он также работает правильно, если отслеживание локальных филиалов уже создано. вы можете вызвать его после первого git clone или в любое время позже.если вам не нужно извлекать ветку master после клонирования, используйте git branch -r | sed -n '/->/!s#^ origin/##p'| xargs -l1 git checkout 

git clone --mirror на оригинальном репо работает хорошо для этого.git clone --mirror /path/to/original.git git remote set-url origin /path/to/new-repo.git git push -u origin 

я собираюсь добавить свои 2 цента здесь, потому что я попал сюда, пытаясь выяснить, как удалить удаленную ветку, которую я удалил локально. происхождение не было моим, и я не хотел проходить через клонирование всего это сработало для меня:при условии, что вам нужно воссоздать ветку локально:git checkout -b recreated-branch-name git branch -a (to list remote branches) git rebase remotes/remote-origin/recreated-branch-name так что, если бы я разветвлялся от gituser/master на sjp, а затем разветвлял его на sjp/mynewbranch, это выглядело бы так:$ git checkout -b mynewbranch $ git branch -a master remotes/sjp/master remotes/sjp/mynewbranch $ git fetch (habit to always do before) $ git rebase remotes/sjp/mynewbranch </code></pre>

<p>немного опоздал на вечеринку, но я думаю, что сработает</p><pre><code>mkdir yourrepo cd yourrepo git init --bare .git # create a bare repo git remote add origin remote\_url # add a remote git fetch origin refs/heads/*:refs/heads/* # fetch heads git fetch origin refs/tags/*:refs/tags/* # fetch tags git init # reinit work tree git checkout master # checkout a branch </code></pre><p>если это делает что-то нежелательное, я хотел бы знать. тем не менее, пока, это работает для меня.</p>

<p>этот вариант клонирует удаленное репо со всеми локальными филиалами без необходимости извлекать каждую ветку по очереди. не нужно никаких причудливых сценариев.</p><p>создайте папку с тем же именем репозитория, к которому вы хотите клонировать и cd, например:</p><pre><code>mkdir somerepo cd somerepo </code></pre><p>теперь выполните эти команды, но с реальным именем пользователя/reponame репо </p><pre><code>git clone --bare git@github.com:someuser/somerepo.git .git git config --bool core.bare false git reset --hard git branch </code></pre><p>voiala! у вас есть все филиалы там!</p>

<p>вот скрипт bash для извлечения всех веток и тегов проекта git в виде снимков в отдельные папки. </p><p> <a href="https://gist.github.com/hfossli/7562257">https://gist.github.com/hfossli/7562257</a> </p><p>может быть, не то, что было задано напрямую, но некоторые люди могут прийти сюда в поисках этого решения.</p>