有没有推荐的方法将git与colab集成?
例如,是否可以处理来自Google源代码库或类似内容的代码?
谷歌驱动器和云存储都不能用于git功能。
所以我想知道是否有办法继续这样做?
答案 0 :(得分:23)
git
,您可以使用!
来调用shell命令。
例如,要克隆git
存储库:
!git clone https://github.com/fastai/courses.git
这是一个克隆存储库并加载存储在其中的Excel文件的完整示例。 https://colab.research.google.com/notebook#fileId=1v-yZk-W4YXOxLTLi7bekDw2ZWZXWW216
答案 1 :(得分:14)
如果要克隆私有存储库,最快的方法是:
!git clone https://username:password@github.com/username/repository.git
答案 2 :(得分:9)
为了保护您的帐户用户名和密码,您可以使用getPass
并将其连接到shell命令中:
from getpass import getpass
import os
user = getpass('BitBucket user')
password = getpass('BitBucket password')
os.environ['BITBUCKET_AUTH'] = user + ':' + password
!git clone https://$BITBUCKET_AUTH@bitbucket.org/{user}/repository.git
答案 3 :(得分:6)
在Google colab 中克隆您的私有 github 仓库的非常简单的方法如下。
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
答案 4 :(得分:4)
您可以使用ssh协议将您的私人存储库与colab连接
在本地计算机上生成ssh密钥对,不要忘记保留 如果释义为空,请查看此tutorial。
将其上传至colab,请检查以下screenshot
from google.colab import files
uploaded = files.upload()
将ssh kay对移动到/ root并连接到git
! rm -rf /root/.ssh/*
! mkdir /root/.ssh
! tar -xvzf ssh.tar.gz
! cp ssh/* /root/.ssh && rm -rf ssh && rm -rf ssh.tar.gz
! chmod 700 /root/.ssh
! ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
! chmod 644 /root/.ssh/known_hosts
! git config --global user.email "email"
! git config --global user.name "username"
! ssh git@gitlab.com
验证您的私人存储库,请查看此Per-repository deploy keys。
使用! git@gitlab.com:{account}/{projectName}.git
注意:要使用push,你必须为
提供写访问权限
使用。身份验证git服务器的公共ssh密钥。
答案 5 :(得分:4)
您几乎可以使用以下链接: 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>
现在您将在Google云端硬盘(也连接到您的Google Colab运行时计算机 )的projects
文件夹中拥有克隆的Git项目
4-(转到Google驱动器(使用浏览器等),然后转到“项目”文件夹,然后打开要在Google Colab中使用的.ipynb
文件。
5-现在,您具有要使用的.ipynb
的Google Colab运行时,该也已连接到Google云端硬盘,并且所有克隆的git文件都在Colab中运行时的存储空间。
注意:
1-检查您的Colab运行时是否已连接到Google云端硬盘。如果未连接,请重复上述步骤#1 。
2-使用“ pwd”和“ cd”命令再次检查current directory
与Google Drive (上面的步骤2)中克隆的git项目相关。。 >
答案 6 :(得分:3)
没有一个答案提供像这样的直接和直接的答案:
可能这就是您正在寻找的答案..
适用于公共和私有存储库的 colab,不要更改/跳过任何步骤:(替换所有 {vars}
)
TL;DR 完整流程:
!git clone https://{your_username}:{your_password}@github.com/{destination_repo_username}/{destination_repo_projectname}.git
%cd /content/{destination_repo_username}
!git config --global user.name "{your_username}"
!git config --global user.email "{your_email_id}"
!git config --global user.password "{your_password}"
进行更改,然后运行:
!git add .
!git commit -m "{Message}"
!git push
!git clone https://{your_username}:{your_password}@github.com/{destination_repo_username}/{destination_repo_projectname}.git
使用用于 jupyter 笔记本的行魔术命令 %cd
将目录更改为 {destination_repo_username}。
%cd /content/{destination_repo_username}
健全性检查是否一切正常!
!git pull
如果克隆后没有对远程 git repo 进行任何更改,以下应该是显示的输出:
Already up to date.
同样检查暂存/未暂存更改的状态。
!git status
它应该显示这个,选择默认分支:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
检查您之前在 repo 上所做的提交:
!git log -n 4
输出带有日志的 Git 提交 ID:
commit 18ccf27c8b2d92b560e6eeab2629ba0c6ea422a5 (HEAD -> main, origin/main, origin/HEAD)
Author: Farhan Hai Khan <njrfarhandasilva10@gmail.com>
Date: Mon May 31 00:12:14 2021 +0530
Create README.md
commit bd6ee6d4347eca0e3676e88824c8e1118cfbff6b
Author: khanfarhan10 <njrfarhandasilva10@gmail.com>
Date: Sun May 30 18:40:16 2021 +0000
Add Zip COVID
commit 8a3a12863a866c9d388cbc041a26d49aedfa4245
Author: khanfarhan10 <njrfarhandasilva10@gmail.com>
Date: Sun May 30 18:03:46 2021 +0000
Add COVID Data
commit 6a16dc7584ba0d800eede70a217d534a24614cad
Author: khanfarhan10 <njrfarhandasilva10@gmail.com>
Date: Sun May 30 16:04:20 2021 +0000
Removed sample_data using colab (testing)
从本地 repo 目录进行更改。
这些可能包括编辑、删除、编辑。
from google.colab import drive
drive.mount('/content/gdrive')
import shutil
# For a folder:
shutil.copytree(src_folder,des_folder)
# For a file:
shutil.copy(src_file,des_file)
# Create a ZipFile
shutil.make_archive(archive_name, 'zip', directory_to_zip)
告诉 Git 你是谁?
!git config --global user.name "{your_username}"
!git config --global user.email "{your_email_id}"
!git config --global user.password "{your_password}"
检查远程 url 是否设置和配置正确:
!git remote -v
如果配置正确,它应该输出以下内容:
origin https://{your_username}:{your_password}@github.com/{destination_repo_username}/{destination_repo_projectname}.git (fetch)
origin https://{your_username}:{your_password}@github.com/{destination_repo_username}/{destination_repo_projectname}.git (push)
你知道该怎么做。
!git add .
!git commit -m "{Message}"
!git push
享受吧!
答案 7 :(得分:2)
我在这里尝试了一些方法,它们都运行良好,但是我面临的一个问题是,在笔记本单元中处理所有git命令和其他相关命令(例如使用DVC进行版本控制)变得很困难。因此,我转向了这个不错的解决方案,Kora。它是可以在colab中运行的终端仿真器。这使易用性与本地计算机中的终端非常相似。笔记本仍将保留,我们可以照常编辑文件和单元格。由于此控制台是临时的,因此不会公开任何信息。 GitHub登录和其他命令可以照常运行。
科拉:https://pypi.org/project/kora/
用法:
!pip install kora
from kora import console
console.start()
答案 8 :(得分:2)
我终于振作起来,为此写了一个python包。
pip install clmutils # colab-misc-utils
在 /content/drive/MyDrive(如果谷歌驱动器安装到驱动器)或 /content/drive/.env 中创建一个 dotenv 或 .env
# 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-----
"
在 Colab 单元中
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
)
然后,您就可以像在家中或工作中在自己可爱的计算机上一样执行所有 git cloen
、修改代码、git push
事情。
clmutils
还有一个名为 setup_ssh_tunnel
的函数,用于设置到 Colab 的反向 ssh 隧道。它还从 .env 文件中读取各种密钥、用户名、主机名。有点牵连。但是,如果您知道如何手动设置到 Colab 的反向 ssh 隧道,那么您就可以轻松搞清楚它们的用途。 github 存储库 (google clmutils pypi
) 上提供了详细信息。
答案 9 :(得分:1)
使用git与github或gitlab同步colab的三个步骤。
生成私钥-公钥对。将私钥复制到系统clibboard中以在步骤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像往常一样拉/推。
只需稍作更改,即可在colab和HostA之间对rsync使用相同的想法:
在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 root@HostA hostnam # ssh-keyscan
HostA >> /root/.ssh/known_hosts似乎不适用于IP。
答案 10 :(得分:0)
使用以下方法安装驱动器:
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__)
答案 11 :(得分:0)
如果您想共享您的存储库和协作库,则此方法有效。如果您有多个存储库,也可以使用。只需将它扔进一个单元格即可。
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
答案 12 :(得分:0)
解决方案https://stackoverflow.com/a/53094151/3924118对我不起作用,因为表达式{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://$GITHUB_AUTH@github.com/$USER/$REPOSITORY.git
os.environ['USER'] = os.environ['PASSWORD'] = os.environ['REPOSITORY'] = os.environ['GITHUB_AUTH'] = ""
如果您能够克隆your-repo
,则在此命令的输出中应该看不到任何密码。 如果出现错误,密码可能会显示在输出中,因此请确保在此命令失败时不要共享笔记本。
答案 13 :(得分:0)
将私有存储库克隆到Google colab:
生成令牌:
Settings -> Developer settings -> Personal access tokens -> Generate new token
复制令牌并克隆存储库(相应地替换用户名和令牌)
!git clone https://username:token@github.com/username/repo_name.git