Способы использования 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

  1. Создайте пары ключей ssh на локальном компьютере, не забудьте сохранить
    парафраз пустой, проверьте этот учебник.

  2. Загрузите его в colab, проверьте следующий снимок экрана

    from google.colab import files
    uploaded = files.upload()

  3. Переместите пары 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]
  4. Аутентифицируйте свой личный репозиторий, проверьте ключи развертывания для каждого репозитория.

  5. Используйте ! [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.

  1. Создайте пару закрытого-открытого ключа. Скопируйте закрытый ключ в системную панель управления для использования на шаге 2. Вставьте открытый ключ в github или gitlab в зависимости от ситуации.

    В Linux ssh-keygen может использоваться для генерации пары ключей в ~/.ssh. Результирующий закрытый ключ находится в файле id_rsa, открытый ключ - в файле id_rsa.pub.

  2. В 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 
    
  3. Используйте git, чтобы тянуть/толкать как обычно.

Эта же идея может быть использована для rsync между colab и HostA с небольшими изменениями:

  1. Создайте пару закрытого-открытого ключа. Скопируйте закрытый ключ в системную панель управления для использования на шаге 2. Вставьте открытый ключ в author_keys в .ssh в HostA.
  2. В 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.

  1. Используйте rsync для синхронизации файлов между colab и HostA как обычно.

Ответ 7

Самый простой и простой способ клонировать ваше личное репозиторий в Google colab приведен ниже.

  1. Ваш пароль не будет раскрыт
  2. Хотя ваш пароль содержит специальный символ, он также работает
  3. Просто запустите приведенный ниже фрагмент в ячейке 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, вы не должны видеть пароль в выходных данных этой команды. Если вы получили сообщение об ошибке, пароль может отображаться в выходных данных, поэтому при сбое этой команды убедитесь, что вы не открыли общий доступ к своему блокноту.