Способы использования Git с Google Colab
Есть ли рекомендуемые методы для интеграции git с colab?
Например, можно ли работать с кодом из репозиториев Google или подобных?
Для git-функциональности нельзя использовать ни Google-накопитель, ни облачное хранилище.
Поэтому мне было интересно, есть ли способ сделать это?
Ответы
Ответ 1
git
установлен на машине, и вы можете использовать !
для вызова команд оболочки.
Например, чтобы клонировать репозиторий git
:
!git clone https://github.com/fastai/courses.git
Вот полный пример, который клонирует репозиторий и загружает файл Excel, хранящийся в нем. https://colab.research.google.com/notebook#fileId=1v-yZk-W4YXOxLTLi7bekDw2ZWZXWW216
Ответ 2
Если вы хотите клонировать частный репозиторий, самым быстрым способом будет:
!git clone https://username:[email protected]/username/repository.git
Ответ 3
Чтобы защитить имя пользователя и пароль своей учетной записи, вы можете использовать getPass
и объединить их в команде оболочки:
from getpass import getpass
import os
user = getpass('BitBucket user')
password = getpass('BitBucket password')
os.environ['BITBUCKET_AUTH'] = user + ':' + password
!git clone https://[email protected]/{user}/repository.git
Ответ 4
Вы можете использовать протокол ssh для соединения вашего частного хранилища с colab
Создайте пары ключей ssh на локальном компьютере, не забудьте сохранить
парафраз пустой, проверьте этот учебник.
Загрузите его в colab, проверьте следующий снимок экрана
from google.colab import files
uploaded = files.upload()
Переместите пары ssh kay в /root и подключитесь к git
- удалить ранее ssh файлы
! rm -rf /root/.ssh/*
! mkdir /root/.ssh
- распакуйте ваши ssh файлы
! tar -xvzf ssh.tar.gz
- скопировать его в корень
! cp ssh/* /root/.ssh && rm -rf ssh && rm -rf ssh.tar.gz
! chmod 700 /root/.ssh
- добавьте ваш git-сервер, например, gitlab в качестве известного ssh-хоста
! ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
! chmod 644 /root/.ssh/known_hosts
- установить учетную запись git
! git config --global user.email "email"
! git config --global user.name "username"
- наконец, подключитесь к вашему git-серверу
! ssh [email protected]
Аутентифицируйте свой личный репозиторий, проверьте ключи развертывания для каждого репозитория.
Используйте ! [email protected]:{account}/{projectName}.git
примечание: чтобы использовать push, вы должны предоставить права на запись для
открытый ключ ssh, с которым вы аутентифицируете git server.
Ответ 5
Вы можете почти использовать эту ссылку:
https://qiita.com/Rowing0914/items/51a770925653c7c528f9
В качестве резюме по приведенной выше ссылке вы должны выполнить следующие действия:
1- подключите среду выполнения Google Colab к Google Диску с помощью следующих команд:
from google.colab import drive
drive.mount('/content/drive')
Для этого потребуется процесс аутентификации. Делай все, что нужно.
2- Установите current directory
путь, по которому вы хотите клонировать проект Git:
в моем примере:
path_clone = "drive/My Drive/projects"
!cd path_clone
не забудьте использовать !
в начале команды cd
.
3- Клонировать проект Git:
!git clone <Git project URL address>
теперь у вас будет клонированный проект Git в папке projects
на вашем Google Диске (который также подключен к вашей машине времени выполнения Google Colab)
4- Перейдите на свой диск Google (с помощью браузера и т.д.), Затем перейдите в папку "проекты" и откройте файл .ipynb
, который вы хотите использовать в Google Colab.
5- Теперь у вас есть среда выполнения Google Colab с .ipynb
, который вы хотели использовать, который также подключен к вашему Google Диску, и все клонированные файлы git находятся в хранилище времени выполнения Colab.
Примечание:
1- Убедитесь, что ваша среда выполнения Colab подключена к Google Drive. Если он не подключен, просто повторите шаг № 1 выше.
2- Дважды проверьте с помощью команд "pwd" и "cd", что current directory
относится к клонированному проекту git в Google Drive (шаг № 2 выше).
Ответ 6
Три шага для использования git для синхронизации colab с github или gitlab.
Создайте пару закрытого-открытого ключа. Скопируйте закрытый ключ в системную панель управления для использования на шаге 2. Вставьте открытый ключ в github или gitlab в зависимости от ситуации.
В Linux ssh-keygen может использоваться для генерации пары ключей в ~/.ssh. Результирующий закрытый ключ находится в файле id_rsa, открытый ключ - в файле id_rsa.pub.
В Colab выполните
key = \
'''
paste the private key here
'''
! mkdir -p /root/.ssh
with open(r'/root/.ssh/id_rsa', 'w', encoding='utf8') as fh:
fh.write(key)
! chmod 600 /root/.ssh/id_rsa
! ssh-keyscan github.com >> /root/.ssh/known_hosts
Используйте git, чтобы тянуть/толкать как обычно.
Эта же идея может быть использована для rsync между colab и HostA с небольшими изменениями:
- Создайте пару закрытого-открытого ключа. Скопируйте закрытый ключ в системную панель управления для использования на шаге 2. Вставьте открытый ключ в author_keys в .ssh в HostA.
В Colab выполните
key = \
'''
paste the private key here
'''
! mkdir -p /root/.ssh
with open(r'/root/.ssh/id_rsa', 'w', encoding='utf8') as fh:
fh.write(key)
! chmod 600 /root/.ssh/id_rsa
! ssh -oStrictHostKeyChecking=no [email protected] hostnam # ssh-keyscan
HostA >>/root/.ssh/known_hosts, похоже, не работает с IP.
- Используйте rsync для синхронизации файлов между colab и HostA как обычно.
Ответ 7
Самый простой и простой способ клонировать ваше личное репозиторий в Google colab приведен ниже.
- Ваш пароль не будет раскрыт
- Хотя ваш пароль содержит специальный символ, он также работает
- Просто запустите приведенный ниже фрагмент в ячейке Colab, и он будет выполнен в интерактивном режиме
import os
from getpass import getpass
import urllib
user = input('User name: ')
password = getpass('Password: ')
password = urllib.parse.quote(password) # your password is converted into url format
repo_name = input('Repo name: ')
cmd_string = 'git clone https://{0}:{1}@github.com/{0}/{2}.git'.format(user, password, repo_name)
os.system(cmd_string)
cmd_string, password = "", "" # removing the password from the variable
Ответ 8
Смонтируйте диск, используя:
from google.colab import drive
drive.mount('/content/drive/')
Тогда:
%cd /content/drive/
Чтобы клонировать репо на вашем диске
!git clone <github repo url>
Доступ к другим файлам из репо (пример: helper.py - это другой файл репо):
import imp
helper = imp.new_module('helper')
exec(open("drive/path/to/helper.py").read(), helper.__dict__)
Ответ 9
Это работает, если вы хотите поделиться своим репо и колабом. Также работает, если у вас есть несколько репо. Просто бросьте это в камеру.
import ipywidgets as widgets
from IPython.display import display
import subprocess
class credentials_input():
def __init__(self, repo_name):
self.repo_name = repo_name
self.username = widgets.Text(description='Username', value='')
self.pwd = widgets.Password(description = 'Password', placeholder='password here')
self.username.on_submit(self.handle_submit_username)
self.pwd.on_submit(self.handle_submit_pwd)
display(self.username)
def handle_submit_username(self, text):
display(self.pwd)
return
def handle_submit_pwd(self, text):
cmd = f'git clone https://{self.username.value}:{self.pwd.value}@{self.repo_name}'
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
output, error = process.communicate()
print(output, error)
self.username.value, self.pwd.value = '', ''
get_creds = credentials_input('github.com/username/reponame.git')
get_creds
Ответ 10
Решение fooobar.com/info/15016092/... у меня не сработало, потому что выражение {user}
не было преобразовано в фактическое имя пользователя (я получил 400 неверных запросов), поэтому я немного изменил это решение на следующее.
from getpass import getpass
import os
os.environ['USER'] = input('Enter the username of your Github account: ')
os.environ['PASSWORD'] = getpass('Enter the password of your Github account: ')
os.environ['REPOSITORY'] = input('Enter the name of the Github repository: ')
os.environ['GITHUB_AUTH'] = os.environ['USER'] + ':' + os.environ['PASSWORD']
!rm -rf $REPOSITORY # To remove the previous clone of the Github repository
!git clone https://[email protected]/$USER/$REPOSITORY.git
os.environ['USER'] = os.environ['PASSWORD'] = os.environ['REPOSITORY'] = os.environ['GITHUB_AUTH'] = ""
Если вы можете клонировать your-repo
, вы не должны видеть пароль в выходных данных этой команды. Если вы получили сообщение об ошибке, пароль может отображаться в выходных данных, поэтому при сбое этой команды убедитесь, что вы не открыли общий доступ к своему блокноту.