Methoden zur Verwendung von Git mit Google Colab

76

Gibt es empfohlene Methoden, um Git in Colab zu integrieren?

Ist es beispielsweise möglich, Code aus Google-Quellrepositorys oder Ähnlichem zu verarbeiten?

Weder Google Drive noch Cloud-Speicher können für die Git-Funktionalität verwendet werden.

Also habe ich mich gefragt, ob es noch einen Weg gibt, das zu tun?

Prashanth
quelle

Antworten:

49

gitist auf dem Computer installiert und Sie können !Shell-Befehle aufrufen.

So klonen Sie beispielsweise ein gitRepository:

!git clone https://github.com/fastai/courses.git

Hier ist ein vollständiges Beispiel, das ein Repository klont und eine darin gespeicherte Excel-Datei lädt. https://colab.research.google.com/notebook#fileId=1v-yZk-W4YXOxLTLi7bekDw2ZWZXWW216

Bob Smith
quelle
13
Gibt es eine Möglichkeit, den Benutzernamen und das Passwort beim Klonen von privaten Repos einzugeben?
Abhai Kollara
6
Wie wäre es, die Ergebnisse von Colab wieder in Github zu bringen? Ich denke hauptsächlich an Checkpoint-Dateien, um die Modelle zur Inferenz auf einem lokalen Computer
abzurufen
2
Erstellen Sie in Ihren Github-Einstellungen auf der Registerkarte Dev ein Token und verwenden Sie Folgendes : ! git clone https://[email protected]/username/repository.git.
Vladimir Iashin
46

Wenn Sie ein privates Repository klonen möchten, ist der schnellste Weg:

!git clone https://username:[email protected]/username/repository.git

Paulius Venclovas
quelle
2
Das ist nahe daran, eine andere Antwort zu wiederholen. Aber willkommen.
Qräbnö
2
Gibt es eine Möglichkeit, Benutzername und Passwort dynamisch zu übergeben? Variablen verwenden?
Gowtham M
2
u = 'user0'; p = 'pass0'; !git clone https://$u:[email protected]/$u/repository.gitDas sollte funktionieren, {p} {u}auch funktionieren. (! ... sollte aber eine neue Zeile beginnen.)
Mikey
1
Wenn Sie @Ihr Passwort eingegeben haben, ersetzen Sie es durch %40.
Paradocslover
38

Die sehr einfache und einfache Möglichkeit, Ihr privates Github- Repo in Google Colab zu klonen, ist wie folgt .

  1. Ihr Passwort wird nicht angezeigt
  2. Obwohl Ihr Passwort Sonderzeichen enthält, funktioniert es auch
  3. Führen Sie einfach das folgende Snippet in der Colab-Zelle aus und es wird auf interaktive Weise ausgeführt
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
Vinoj John Hosan
quelle
1
Sie sagen, das Passwort wird nicht offengelegt, aber wenn man Zugriff auf die Bash-Anweisungen hat, die von Colab Notebook ausgeführt werden, können sie das Passwort leicht finden, nicht wahr? und wenn Sie davon ausgehen, dass niemand Zugriff auf solche Bash-Anweisungen hat, wie genau legen dann andere Methoden das Kennwort offen?
Ritwik
1
@Ritwik die Passwörter werden nicht auf dem Notizbuch
gespeichert
15

Um den Benutzernamen und das Kennwort Ihres Kontos zu schützen, können Sie getPassdiese im Shell-Befehl verwenden und verketten:

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
Marafon Thiago
quelle
1
Dieser Schutz ist sehr schwach, da das Klartextkennwort im Protokoll / in der Ausgabe angezeigt wird.
Simon
1
@Simon Das Kennwort wird nur angezeigt, wenn Sie das Repository nicht klonen können, weil eine Fehlermeldung angezeigt wird.
nbro
In meinem Fall habe ich wegen eine 400 (schlechte Anfrage) erhalten {user}, die nicht in den tatsächlichen Benutzernamen übersetzt wird.
nbro
11

Sie können das ssh-Protokoll verwenden, um Ihr privates Repository mit colab zu verbinden

  1. Generieren Sie SSH-Schlüsselpaare auf Ihrem lokalen Computer. Vergessen Sie nicht,
    die Paraphrase leer zu lassen. Lesen Sie dieses Tutorial .

  2. Laden Sie es in colab hoch und überprüfen Sie den folgenden Screenshot

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

  3. Verschiebe die ssh kay Paare nach / root und verbinde dich mit git

    • Entfernen Sie zuvor SSH-Dateien
      ! rm -rf /root/.ssh/*
      ! mkdir /root/.ssh
    • Dekomprimieren Sie Ihre SSH-Dateien
      ! tar -xvzf ssh.tar.gz
    • kopiere es nach root
      ! cp ssh/* /root/.ssh && rm -rf ssh && rm -rf ssh.tar.gz ! chmod 700 /root/.ssh
    • Fügen Sie Ihren Git-Server hinzu, z. B. Gitlab, als bekannten SSH-Host
      ! ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
      ! chmod 644 /root/.ssh/known_hosts
    • Setze dein Git-Konto
      ! git config --global user.email "email"
      ! git config --global user.name "username"
    • Verbinde dich endlich mit deinem Git-Server
      ! ssh [email protected]
  4. Authentifizieren Sie Ihr privates Repository. Überprüfen Sie diese Bereitstellungsschlüssel pro Repository .

  5. Verwendung ! [email protected]:{account}/{projectName}.git
    Hinweis: Um die Verwendung Push, müssen Sie den Schreibzugriff geben
    die öffentlichen SSH - Schlüssel , dass Sie mit git - Server authentifizieren.

Fadi Bakoura
quelle
6

Sie können diesen Link fast verwenden: https://qiita.com/Rowing0914/items/51a770925653c7c528f9

Als Zusammenfassung des obigen Links sollten Sie folgende Schritte ausführen:

1- Verbinden Sie Ihre Google Colab-Laufzeit mit den folgenden Befehlen mit Ihrem Google Drive:

from google.colab import drive
drive.mount('/content/drive')

Es würde einen Authentifizierungsprozess benötigen. Mach was immer es braucht.

2- Legen Sie dort current directoryden Pfad fest, zu dem Sie das Git-Projekt klonen möchten:

in meinem Beispiel:

path_clone = "drive/My Drive/projects"
!cd path_clone

Vergessen Sie nicht, zu !Beginn des cdBefehls zu verwenden.

3- Klonen Sie das Git-Projekt:

!git clone <Git project URL address>

Jetzt haben Sie das geklonte Git-Projekt in einem projectsOrdner in Ihrem Google Drive ( der auch mit Ihrem Google Colab-Laufzeitcomputer verbunden ist ).

4- Gehen Sie zu Ihrem Google Drive (mit Browser oder usw.) und gehen Sie dann zum Ordner "Projekte" und öffnen Sie den.ipynb Datei, die Sie in Google Colab verwenden möchten.

5- Jetzt haben Sie die Google Colab-Laufzeit mit der .ipynbgewünschten, die auch mit Ihrem Google Drive verbunden ist, und alle geklonten Git-Dateien befinden sich im Speicher der Colab-Laufzeit.

Hinweis:

1- Überprüfen Sie, ob Ihre Colab-Laufzeit mit Google Drive verbunden ist. Wenn keine Verbindung besteht, wiederholen Sie einfach den obigen Schritt 1 .

2- Überprüfen Sie mit den Befehlen "pwd" und "cd", ob das current directorymit dem geklonten Git-Projekt in Google Drive zusammenhängt (Schritt 2 oben) .

Sharifirad
quelle
4

Drei Schritte, um mit git colab mit github oder gitlab zu synchronisieren.

  1. Generieren Sie ein privat-öffentliches Schlüsselpaar. Kopieren Sie den privaten Schlüssel zur Verwendung in Schritt 2 in die System-Clibboard. Fügen Sie den öffentlichen Schlüssel entsprechend in github oder gitlab ein.

    Unter Linux kann ssh-keygen verwendet werden, um das Schlüsselpaar in ~ / .ssh zu generieren. Der resultierende private Schlüssel befindet sich in der Datei id_rsa, der öffentliche Schlüssel in der Datei id_rsa.pub.

  2. Führen Sie in Colab aus

    key = \
    '''
    paste the private key here 
    (your id_rsa or id_ecdsa file in the .ssh directory, e.g.
    -----BEGIN EC PRIVATE KEY-----
    M..............................................................9
    ...............................................................J
    ..................................==
    -----END EC PRIVATE KEY-----
    '''
    ! 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 
    # test setup
    ! ssh -T [email protected]
    # if you see something like "Hi ffreemt! You've successfully 
    # authenticated, but GitHub does not provide shell access."
    # you are all set. You can tweak .ssh/config for multiple github accounts
    
  3. Verwenden Sie git, um wie gewohnt zu ziehen / zu drücken.

Die gleiche Idee kann für rsync (oder ssh) bewteen colab und HostA mit geringfügigen Änderungen verwendet werden:

  1. Generieren Sie ein privat-öffentliches Schlüsselpaar. Kopieren Sie den privaten Schlüssel zur Verwendung in Schritt 2 in die System-Clibboard. Fügen Sie den öffentlichen Schlüssel in .ssh in HostA in autorisierte_Tasten ein.

  2. Führen Sie in Colab aus

    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 root@HostA hostnam  # ssh-keyscan 
    

HostA >> /root/.ssh/known_hosts scheint nicht mit IP zu funktionieren.

  1. Verwenden Sie rsync, um Dateien zwischen colab und HostA wie gewohnt zu synchronisieren.
mikey
quelle
3

Die Lösung https://stackoverflow.com/a/53094151/3924118 hat bei mir nicht funktioniert, da der Ausdruck {user}nicht in den tatsächlichen Benutzernamen konvertiert wurde (ich habe eine 400-fehlerhafte Anfrage erhalten). Daher habe ich diese Lösung geringfügig in die folgende geändert einer.

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'] = ""

Wenn Sie klonen können your-repo, sollte in der Ausgabe dieses Befehls kein Kennwort angezeigt werden. Wenn Sie eine Fehlermeldung erhalten, wird das Kennwort möglicherweise in der Ausgabe angezeigt. Stellen Sie daher sicher, dass Sie Ihr Notizbuch nicht freigeben, wenn dieser Befehl fehlschlägt.

nbro
quelle
2

Ich habe einige der Methoden hier ausprobiert und sie haben alle gut funktioniert, aber ein Problem, mit dem ich konfrontiert war, war, dass es schwierig wurde, alle Git-Befehle und andere verwandte Befehle, zum Beispiel die Versionskontrolle mit DVC, in Notebook-Zellen zu handhaben. Also habe ich mich dieser schönen Lösung zugewandt, Kora. Es ist ein Terminalemulator, mit dem in colab ausgeführt werden kann. Dies gibt die Benutzerfreundlichkeit, die einem Terminal in einem lokalen Computer sehr ähnlich ist. Das Notizbuch ist noch am Leben und wir können Dateien und Zellen wie gewohnt bearbeiten. Da diese Konsole nur vorübergehend ist, werden keine Informationen angezeigt. GitHub-Login und andere Befehle können wie gewohnt ausgeführt werden.

Kora: https://pypi.org/project/kora/

Verwendung:

!pip install kora
from kora import console
console.start()
sreagm
quelle
0

Mounten Sie das Laufwerk mit:

from google.colab import drive
drive.mount('/content/drive/')

Dann:

%cd /content/drive/

So klonen Sie das Repo in Ihrem Laufwerk

!git clone <github repo url> 

Greifen Sie vom Repo aus auf andere Dateien zu (Beispiel: helper.py ist eine andere Datei im Repo):

import imp 
helper = imp.new_module('helper')
exec(open("drive/path/to/helper.py").read(), helper.__dict__)
Ish
quelle
2
fatal:
Arbeitsbaum-Verzeichnis
0

Dies funktioniert, wenn Sie Ihr Repo und Colab teilen möchten. Funktioniert auch, wenn Sie mehrere Repos haben. Wirf es einfach in eine Zelle.

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
Jaden Travnik
quelle
0

Klonen eines privaten Repos in Google Colab:

Token generieren:

Settings -> Developer settings -> Personal access tokens -> Generate new token

Kopieren Sie das Token und klonen Sie das Repo (ersetzen Sie Benutzername und Token entsprechend).

!git clone https://username:[email protected]/username/repo_name.git
mounirboulwafa
quelle
0

Ich habe mich endlich zusammengerissen und ein Python-Paket dafür geschrieben.

pip install clmutils  # colab-misc-utils

Erstellen Sie ein dotenv oder .env in / content / drive / MyDrive (wenn Google Drive auf Laufwerk gemountet ist) oder /content/drive/.env mit

# for git 
user_email = "your-email"
user_name = "your-github-name"
gh_key = "-----BEGIN EC PRIVATE KEY-----
...............................................................9
your github private key........................................J
..................................==
-----END EC PRIVATE KEY-----
"

In einer Colab-Zelle

from clmutils import setup_git, Settings

config = Settings()
setup_git(
    user_name=config.user_name,
    user_email=config.user_email,
    priv_key=config.gh_key
)

Sie sind dann git cloenbereit, alles zu tun , Code zu ändern, git pushDinge, als ob sie auf Ihrem eigenen schönen Computer zu Hause oder bei der Arbeit wären.

clmutilshat auch eine Funktion, die aufgerufen wird, setup_ssh_tunnelum einen umgekehrten SSH-Tunnel nach Colab einzurichten . Außerdem werden verschiedene Schlüssel, Benutzername und Hostname aus der ENV-Datei gelesen. Es ist ein bisschen involvierend. Wenn Sie jedoch wissen, wie man einen Reverse-SSH-Tunnel nach Colab manuell einrichtet, können Sie problemlos herausfinden, wofür sie verwendet werden. Details finden Sie im Github Repo (Google clmutils pypi).

mikey
quelle