Google ColabでGitを活用 備忘録(2) ▲▼Remind using Git on Google Colabratry(2)▲▼

 前回BLOG https://shikuuk.blogspot.com/2025/10/google-colabgitremind-using-git-on.html

前回までにmemoしたGoogleColabにおけるGitのBasicOperationについてSummarizeしておきます。GoogleColabをStartするたびに以下のCommandLineをNeed To Run the below code.

1)GitIDとE-mailAdressをInput

!git config --global user.email "shikuukitashirakawa@gmail.com"
!git config --global user.name "shikuu"

2)GoogleDriveをimplementation

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

# 1. Google DriveのMy Drive直下へ移動
%cd /content/drive/MyDrive/

# 2. プロジェクト用のフォルダを作成・移動(初回のみ)
!mkdir -p Colab_Git_Project
%cd Colab_Git_Project

# 3. 現在のディレクトリを確認
!pwd

!git init

3)GitでManagementするFolderに移動

%cd /content/drive/MyDrive/Colab_Git_Project
!ls -a

4)GitでCurrentDirectryをAdd Under ControlingすることをDeclare

!git add . #対象Folder内にあるすべてのファイルをgit管理Fileに指定

Until last issue of blog, my folder have had the below status

I check the log of Git, now.

Avobe massege is shown that the current directry has two commits. 

次に、サプー先生の指導に従って、あるフォルダーをGitの追跡対象からExceptするmethodをLearnig
まず、gitで管理しているFolderの中にGitの追跡対象から除外するTestFolderをCreatします。わたくしの場合、'20251027_IgnoreTest'というFolederを作成しました。


このままで'!git status'をすると特に何も変化はございません。






つぎに、このFolder内に'.ignore.txt'というファイルを作成し、その中身にTextStyleで以下のようにGitの追跡対象からexceptするfolder nameをinput





In this status, I run '!git stats'. In the Result, I could show below.

I run '!git add.', so the massege of untracked file was vanishing.
これで'20251027_IgnoreTest'というFolderがGitの管理対象からexceptされたのかどうか、よくわかりませんが、とりあえず、次のStrudyに進みます。

次はBranchです。
いったんここまでのReviceをThirdCommitとしてCommitしておきます。

SapuさんのInstractをFollowして、まず、now controled folder'Colab_Git_Project'をBranchします。Branch nameは’feature/branch_test’にします。

Outputには、新しいブランチ’feature/branch_test’にSwitchした!とあります。
このあたりからがGitのCultureになってくると感じるのですが、いまGitでControlしているFolder’Colab_Git_Project’に’20251027_GitTest01.ipynb’と‘20251027_GitTest02.ipynb’をCreat(Transfer)したあと、’20251027_GitTest01.ipynb’だけをCommit予約にAddして、さらにCommitします。

At this status, '20251027_GitTest02.ipynb' is recongnaized as untracked file.

Like this, '20251027_GitTest01.ipynb'がCommitされました。
Now, let's move to the main branch from 'feature/branch_test'.


Main branchにReturnしてgit statusしても表示は一緒になりました。う~ん、まだよく理解できません。GitのFunctionからThinkすると、mainでは'20251027_GitTest02.ipynb' はNotRecognizedのはずです。
しかし、GoogleColabでは、Sapu先生のYouTubeのようにFileExplorerをUseしてmainとFeature/branch_testの差分や違いを確認することができません。そこで、MasterGemini
にAskです。

Q.GoogleColabでmainとbranchにそれぞれ含まれているフォルダやファイルを確認する方法ってありますか
A.Google ColabでGitブランチ(mainとその他のブランチ)に含まれているファイルやフォルダを確認する最も一般的な方法は、シェルコマンド(行頭に**!**を付ける)を使用して、実際にブランチを切り替えてからファイル一覧を表示することです。

ここでは、確認したいブランチ名を仮に**feature-branch**として説明します。


1. ブランチを切り替えてファイル一覧を確認する方法

この方法が最も直感的で、そのブランチに切り替えたときに作業ディレクトリがどうなるかを確認できます。

ステップ 1: mainブランチのファイルを確認

まず、mainブランチに切り替えて、ファイル一覧を表示します。

Python
# 1. mainブランチに切り替え
!git switch main

# 2. ファイルとフォルダの一覧を表示
# -F オプションはフォルダの末尾に「/」を付けて表示します。
!ls -F

# 補足: サブフォルダの中身まで再帰的に確認したい場合
# !ls -R

ステップ 2: feature-branchのファイルを確認

次に、確認したい別のブランチに切り替えて、同じようにファイル一覧を表示します。

Python
# 1. feature-branch に切り替え
!git switch feature-branch

# 2. ファイルとフォルダの一覧を表示
!ls -F

2. ブランチを切り替えずに内容を比較・確認する方法

現在の作業ブランチ(ワーキングディレクトリ)を変更せずに、特定のブランチに含まれるファイルツリーを確認したい場合は、git ls-treeコマンドを使います。

git ls-treeでブランチのルートを確認

git ls-treeコマンドは、ブランチのコミットID(またはブランチ名)を指定することで、そのブランチのルートディレクトリに含まれるファイルやフォルダ(サブツリー)を一覧表示します。

Python
# mainブランチのルートディレクトリの内容を確認
!git ls-tree --name-only main

# feature-branch のルートディレクトリの内容を確認
!git ls-tree --name-only feature-branch

# フォルダの中身まで再帰的に確認する場合
# !git ls-tree --name-only -r main
コマンド特徴
!git switch [ブランチ名] + !ls -F最も簡単。ブランチを切り替えるため、作業ディレクトリ全体がそのブランチの状態になります。
!git ls-tree --name-only [ブランチ名]ブランチを切り替えない。現在の作業状態を保持したまま、ブランチの内容を確認したい場合に便利です。

補足: 両ブランチの差分のみを確認する方法

どちらのブランチに、どのようなファイルが追加・削除・変更されているか、差分だけを確認したい場合は、git diffコマンドが便利です。

Python
# mainブランチと比較して、feature-branch で変更があったファイルのみを一覧表示
!git diff --name-only main..feature-branchた
例えばOn branch main、ようは自分がmainにいる状態で!ls -fをorderするとbecome like this.

これを踏まえつつ、feature/branch_testにbranchを移動して、もう一度!ls -fをorderすると、become like below.

確かにmainとfeature/branch_testをcompareすると、少なくとも20251027_GitTest01.ipynbがmainには存在せず、後者には存在するという違いがあります。
I don't understand how this happened. So, I want to try various challenge.
'feature/branch_test'にある'20251027_GitTest02.jpynb'を修正してみます。
!git statusをrunすると、the result is almost what I expectedで、modified: 20251027_GitTest02.ipynbというOutputがあります。
In my image, If I commit '20251027_GitTest02.jpynb', then the commitment will effect in only feature/branch_test. 

へぇ~~~、こんなふうにfeature/branch_testとmain_branchのそれぞれのCommitHistoryが表示されるんですね。
I want to understand more deeply, I try to revice '20251027_GitTest02.jpynb' on ferture/branch_test at the area enclosed by the skyblue lines below.


After this, I run !git status, output is below.

Changes not staged for commit:となっているので、!git add . and !git statusをrunします。

I commit the feature/branch_test as 'fourth commit'. the result is below.

I comfirm that Git commite this branch.
For now, I transfer to the main branch. 
After a while I run it, I seem that the branch swith the main branch.
ここからもとのfeature/git_branch_testに戻れなくなったので、MasterGeminiに質問です。

Q.gitでいまのリポジトリ内に存在するすべてのブランチを確認する方法はありますか?

A.はい、Gitリポジトリ内に存在するすべてのブランチを確認する方法はいくつかあります。目的(ローカルのみか、リモートも含めるか)に応じて、使用するコマンドが変わります。

-----

## 🚀 目的別:ブランチ確認コマンド

| 目的 | コマンド | 内容 |
| :--- | :--- | :--- |
| **ローカルブランチ** の一覧表示 | `git branch` | 現在のローカルリポジトリにあるブランチを表示します。アクティブなブランチには **`*`** が付きます。 |
| **リモートブランチ** の一覧表示 | `git branch -r` | リモートトラッキングブランチ(例: `origin/main`)のみを表示します。 |
| **ローカル** と **リモート** のすべての一覧表示 | `git branch -a` | **すべてのブランチ**(ローカルとリモート)を一覧表示します。 |

### `git branch -a` の実行例

`git branch -a` を実行すると、以下のような形式で出力されます。

```
* main
  feature/A
  feature/B
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/feature/C
```

  * `* main`: **現在アクティブなローカルブランチ**
  * `feature/A`, `feature/B`: その他のローカルブランチ
  * `remotes/origin/...`: リモートリポジトリ(`origin`)上のブランチ

-----

## 🔎 詳細情報の表示

ブランチの名前だけでなく、各ブランチの最新コミットメッセージやコミットIDなどの詳細を確認したい場合は、**`-v`** オプションを組み合わせます。

| コマンド | 詳細 |
| :--- | :--- |
| `git branch -v` | ローカルブランチと、それぞれのブランチの最新コミットの詳細を表示します。 |
| `git branch -a -v` | ローカルとリモートのすべてのブランチと、それぞれの最新コミットの詳細を一覧表示します。 |

ブランチのリストと、Gitのブランチ操作の基礎を説明している動画はこちらです: [Gitブランチ一覧の確認方法](https://www.youtube.com/watch?v=UKSACvWuvnk)。
http://googleusercontent.com/youtube_content/0

早速、以下のとおりrunしました。

ここで誤って作成してしまったfeature/git_branch_testを以下のCodeでDeleteします。

次に、再びfeature/branch_testに移動します。
!git checkout feature/branch_test

というcommandになるのですが、ここでわたしがうまくGitを使えていないことに気づきました。何が起こるかというと、このCommandをrunすると、以下のmassegeがOupputされます。


Contentは現在のBranch(CurrentBranchはmain)の中にある20251011_Git_andGitHub_Test.jpynbがmodifyされているので、BranchをSwitchする前に、ModifyをCommitしてくださいというErrorです。いま、わたしはGitでcontrolしようとしているFolderの中にこの20251011_Git_andGitHub_Test.jpynbをStorageしたうえで、この20251011_Git_andGitHub_Test.jpynbの中でGitのcommandをRunしています。ということは、!git checkoutや!git status, !git logをRunするたびに、Modifyが起こっており、Switchする前に、GitのCommandを必ずCommitしないといけないという、奇妙なStatusに陥ってしまいました。
おそらく普通ならDevelopingCodeをGitでControlするFolderにStorageしておき、the out of FoldersでGitのCommandをRunするというStyleなのかなぁとThinkしました。

一方で、逆にとても面白いことが起こることもわかりました。
MainBranchをSelectしたStatusで、いまGitでOperatteしているFolder’Colab_Git_Project'のContentsをBrowserのGoogleDriveを確認します。わたしの場合、こんな感じです。

次に、GitでFeature/branch_testに移動したあと、同じようにGoogleDrive on Brauserでもう一度Folder’Colab_Git_Project'を確認すると、次のようにShownです。

Files In the Red Square are increase for main branch., Because they exist in only 'fearture/branch_test' branch.
そのあと、GoogleColabの'20251011_Git_and_GitHub_Test.jpynb'のTabにgo bachすると、Codeの中身が'fearture/barnch_test'でEdit&RunしていたContentsになっていました。
Git is amaging & Ellegant!!!!

ということで、今回の最後はmainとfeature/branch_testのBothSidesでhave ediittedしてきた’20251011_Git_and_GitHub_Test.jpynb'のMergeにChallengeします。 As flowing by now, I think It will occure many conflict absolutely.

やはり、CONFLICTが発生して、Automatic marge failedというMassegeがput out.
ここまでMainBranchとfeature/branch_testの両方に存在しgている’20251011_Git_and_GitHub_Test.jpynb'というfileで別々のGitOperationをしてきたのですから、無数のConflictが発生して、当たり前ですよね。

次のCodeDevelopmentからはGitをUseしてVersionControlしていこうと思っているので、時々「I’m commited at current status by Git!」みたいなMassegeを入れていこうと思います。

By the way, at this time, I finish basically learning to use Git.






















コメント