はじめに
Colab上で、一からGitHubにpushするまでの手順を記載。
(Google Colaboratory、git version 2.25.1、access tokenを用いてGitHubへアクセス)
Colab上でGitをインストール
!apt-get install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
git is already the newest version (1:2.25.1-1ubuntu3.10).
0 upgraded, 0 newly installed, 0 to remove and 23 not upgraded.
!git --version
git version 2.25.1
# 場所の確認
!pwd
!ls
/content
sample_data
Colab上でローカルリポジトリを作成・コミット
%%bash
# Gitの最低限必要な初期設定
git config --global user.email "test1@example.com"
git config --global user.name "Test1 Name"
%%bash
# テスト用フォルダを作成
cd "/content"
mkdir "test-space"
cd "test-space"
mkdir "local-repo1"
cd "local-repo1"
# ローカルのリポジトリを作成
git init
# テスト用に変更を加えてコミット
echo "test1 in Colab" > test1.txt
git add .
git commit -m "test1 in Colab"
Initialized empty Git repository in /content/test-space/local-repo1/.git/
[master (root-commit) aff0f65] test1 in Colab
1 file changed, 1 insertion(+)
create mode 100644 test1.txt
# %呼出しで、カレントパスを永続化
%cd "/content/test-space/local-repo1"
/content/test-space/local-repo1
%%bash
# フォルダ状況の確認
echo "▼/root:"
ls /root
echo "▼/content: (data-placed)"
ls /content
# Git状況の確認
echo "▼git branch:"
git branch -a -v
▼/root:
▼/content: (data-placed)
sample_data
test-space
▼git branch:
* master aff0f65 test1 in Colab
履歴には、既定で作成されたmasterブランチが1つだけある状態。(前述でテスト用にコミットした履歴が1つだけある状態)
Colab上でGitHubのリモートリポジトリへアクセス・情報を取得
参照:
Google Colab上でGitHubからCloneして変更をPushするまでのまとめ
https://qiita.com/kurilab/items/f6f4374d7b1980060de7
Colab 上で GitHub を使用する
https://zenn.dev/smiyawaki0820/articles/e346ca8b522356
%%bash
# 既存内容のあるリモートリポジトリ(GitHub)を登録
git remote add origin "https://github.com/DL-from-Scratch/test1"
# https://{USER}:{ACCESS_TOKEN}@github.com/{REPOSITORY}.git
git remote set-url origin "https://DL-from-Scratch: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@github.com/DL-from-Scratch/test1.git"
# 確認
git remote -v
origin https://DL-from-Scratch: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@github.com/DL-from-Scratch/test1.git (fetch)
origin https://DL-from-Scratch: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@github.com/DL-from-Scratch/test1.git (push)
↓ ここで、リモートリポジトリ(GitHub)からmasterブランチの履歴を取得
# リモートリポジトリ(GitHub)からmasterブランチの履歴を取得
!git fetch origin master
warning: no common commits
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 34 (delta 5), reused 23 (delta 1), pack-reused 0
Unpacking objects: 100% (34/34), 3.88 KiB | 568.00 KiB/s, done.
From https://github.com/DL-from-Scratch/test1
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
# 確認
!git branch -a -v
!git log --oneline --graph --all
* master aff0f65 test1 in Colab
remotes/origin/master df46e6d test5
* aff0f65 (HEAD -> master) test1 in Colab
* df46e6d (origin/master) test5
* 10d6e72 test4
* ed03349 test3
* cddbc7f test2
* e2607a2 test1
originのmasterを取り込んだので、履歴には、2つの別々の履歴がある状態。(①ローカルmasterブランチ側、②リモートoriginのmasterブランチ側の2つ)
①ローカルmasterブランチ側
* aff0f65 (HEAD -> master) test1 in Colab
---
②リモートoriginのmasterブランチ側
* df46e6d (origin/master) test5
* 10d6e72 test4
* ed03349 test3
* cddbc7f test2
* e2607a2 test1
Colab上でGitHubのリモートリポジトリの内容をcheckout・ファイルを取得
# checkoutでファイル内容を取得
!git checkout origin/master
Note: switching to 'origin/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
...(略)...
HEAD is now at df46e6d test5
# 確認
!ls
README.md subfolder1 test1.txt test2.txt
作業フォルダ内が、GitHubのファイル内容に更新された状態。
treeコマンドでフォルダ構造も表示すると、
!apt-get install tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
tree
0 upgraded, 1 newly installed, 0 to remove and 23 not upgraded.
Need to get 43.0 kB of archives.
After this operation, 115 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 tree amd64 1.8.0-1 [43.0 kB]
Fetched 43.0 kB in 0s (97.1 kB/s)
Selecting previously unselected package tree.
(Reading database ... 128285 files and directories currently installed.)
Preparing to unpack .../tree_1.8.0-1_amd64.deb ...
Unpacking tree (1.8.0-1) ...
Setting up tree (1.8.0-1) ...
Processing triggers for man-db (2.9.1-1) ...
# 確認
!tree
.
├── README.md
├── subfolder1
│ ├── subfolder11
│ │ ├── test1.txt
│ │ └── test2.txt
│ ├── test1.txt
│ └── test2.txt
├── test1.txt
└── test2.txt
2 directories, 7 files
Colab上でGitHubのリモートリポジトリへpush・変更内容を送信
# ローカルでの追跡用に別ブランチを用意
!git checkout -b master_for_test1
Switched to a new branch 'master_for_test1'
%%bash
# テスト用に変更を加えてコミット
echo "test2 in Colab" >> test1.txt
git add .
git commit -m "test2 in Colab"
[master_for_test1 311e71e] test2 in Colab
1 file changed, 1 insertion(+)
# 確認
!git branch -a -v
!git log --oneline --graph --all
master aff0f65 test1 in Colab
* master_for_test1 311e71e test2 in Colab
remotes/origin/master df46e6d test5
* 311e71e (HEAD -> master_for_test1) test2 in Colab
* df46e6d (origin/master) test5
* 10d6e72 test4
* ed03349 test3
* cddbc7f test2
* e2607a2 test1
* aff0f65 (master) test1 in Colab
②リモートoriginのmasterブランチ側
* 311e71e (HEAD -> master_for_test1) test2 in Colab
* df46e6d (origin/master) test5
* 10d6e72 test4
* ed03349 test3
* cddbc7f test2
* e2607a2 test1
---
①ローカルmasterブランチ側
* aff0f65 (master) test1 in Colab
origin/masterの1つ上に履歴が1つ追加された状態。
↓ ここで、GitHubリモートリポジトリへ送信 (ローカルブランチmaster_for_test1を、リモートブランチmasterにpush)
# GitHubリモートリポジトリへ送信 (ローカルブランチmaster_for_test1を、リモートブランチmasterにpush)
!git push origin master_for_test1:master
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/DL-from-Scratch/test1.git
df46e6d..311e71e master_for_test1 -> master
# 確認
!git branch -a -v
!git log --oneline --graph --all
master aff0f65 test1 in Colab
* master_for_test1 311e71e test2 in Colab
remotes/origin/master 311e71e test2 in Colab
* 311e71e (HEAD -> master_for_test1, origin/master) test2 in Colab
* df46e6d test5
* 10d6e72 test4
* ed03349 test3
* cddbc7f test2
* e2607a2 test1
* aff0f65 (master) test1 in Colab
origin/masterが、master_for_test1と同じ位置まで移動し、pushの送信が完了OK。
GitHub上でも、test1.txtに「test2 in Colab」のコミットがある状態が確認できる。
https://github.com/DL-from-Scratch/test1/tree/master
https://github.com/DL-from-Scratch/test1/commits/master
試行したファイル
環境
Google Colaboratory、git version 2.25.1、access tokenを用いてGitHubへアクセス