git checkoutでブランチを切り替え

Python学習【365日チャレンジ!】を達成したてのマスターU(@Udemy11)です。

一応Python学習が一区切りついたので、今日は何を書こうかなと思いつつ、昨日解決しなかったことが気になっていたので、さらにいろいろ調べてみると、なんとか解決の糸口が見えたので、その報告をしておきます。

ブランチの切り替え

GitHubにリポジトリを作成したときに表示されたコマンドに次のコマンドの記述が合ったので、ブランチを変更するコマンドに次のコマンドを使用していました。

git branch -M main

あらためて、ヘルプでオプションの-Mを確認してみると、【move/rename a branch, even if target exists】ということなので、ターゲットが存在していてもブランチを移動、名前を変更するということでした。

これまでの結果から考えると、mainブランチが作成されただけで、作業するブランチがmainはなっていないということのようです。

git checkoutでブランチを切り替え

git cloneでGithub上のリモートリポジトリをローカルリポジトリに複製したあと、git branchでブランチを表示したところ、main*master2つのブランチがあることがわかります。

*がついている方が作業ブランチだということがわかったので、checkoutコマンドでmainに切り替えます。

git checkout main

このコマンドを実行することで次のように、*mainに移動しているのがわかるかと思います。

git checkoutでブランチを切り替え

複数人数で開発を行う本来の使い方なら、多分ブランチを別の名前にして、担当コードを編集して、最終的にmainブランチに統合するのだと思いますが、一人で使う場合はブランチがいくつもあるとわけがわからなくなるので、リモートリポジトリと同じmainブランチを使ったほうがわかりやすいのかなと思います。

まー使い慣れてくると、このあたりのこともよく分かると思いますが、なんと言っても視覚的に分かりづらいので、理解するまでにかなり時間がかかりました。

リポジトリの名前が違う原因

ついでに、なぜgit cloneで複製したリポジトリ名の最後の文字が消えるのか原因がわかったので、記録しておきます。

昨日の記事で書いていますが、gittestというリモートリポジトリをGithub上に作成していて、git cloneを使って、ローカルリポジトリを作成すると、名前がgittesになる問題です。

リモートリポジトリのURLが、https://github.com/udemymaster/gittest.gitなので、t.gitが削除されていると考えられます。

そこで、StaShのパッケージ内にあるgit.pyをチェックしてみると、499行目に原因と思われるコードがありました。

repo = Gittle.clone(args[0],args[1] if len(args) > 1 else os.path.split(args[0])[-1].rstrip('.git'), bare=False)

このコードの後ろの方にあるrstrip('.git')が問題の関数です。

rstrip()は、引数に含まれる文字を文字列の右から削除するので、.gitの4つの文字が左から削除されることになります。

gittestは、最後にtが含まれているので、.gitと一緒に削除されて、gittesになったと考えられます。

git.pyを修正

元のコードを変更して、おかしなことになっても困りますが、このままの状態でも困ってしまうため、思い切って修正することに。

修正内容は、git.pyの499行目のrestrip('.git')replace('.git', '')にするだけなので超簡単。

念のため、git.pyのバックアップを取っておきましょう。

ちなみにsite-package内のStaShをgitでバージョン管理していればバックアップは不要ですけどね。

git cloneで確認

これでgit cloneを実行してうまくリポジトリが作成できるかどうか試してみました。

git checkoutでブランチを切り替え

lsでフォルダ内を表示してみるときちんとgittestが作成されているのがわかりますが、黒背景の青文字なので、cdコマンドでフォルダに移動してみました。

StaShは、GitHubに公開されているため、とりあえずこのバグをissueで報告しておいたので、そのうち誰かが修正してくれると思います。

まとめ

昨日説明したように、PythonistaにStaShを入れる方法は、ある程度の数の紹介記事がありますが、StaShでgitを使う具体的な方法を紹介している記事ってあんまりないんです。

基本的なgitの使い方もままならない状態で、通常のターミナルで使用するgitと基本的な使い方が同じとはいえ、使えないオプションがあったり、使い方がちょっと違ったりするStaSh上のgitを使うのは少し骨が折れます。

一つの問題を解決するにも時間がかかってしまうので、ほんと途中で挫折しそうになっちゃうんですよね。

こんなことを繰り返しながら、もう少し、gitとGitHubのことを学習していこうと思います。