Gitの導入と基本的な使い方
# サーバー側でAPIを作成し、機能を実装した後、会社ではそのコードをリモートリポジトリにプッシュする必要があります。
# チームでの共同開発を行う際には、バージョン管理ソフトウェアとしてSVNやGitが使用されます。
# インストール手順:
- https://git-scm.com/downloads
- インストーラーの指示に従ってインストール
- インストール後に任意のフォルダで右クリックすると「Git GUI here」および「Git Bash here」が表示されれば正常にインストールされています。
PyCharmにおけるGit設定
# GitHubやGiteeなどのオープンソースプラットフォームからプロジェクトをダウンロードする場合、
# PyCharmを使って直接クローンすることも可能です。
# PyCharmの設定画面でGitの実行ファイルパスを指定します。
# オープンソースプロジェクトを取得する際は、VCS -> Get from Version Control -> URLを入力してCloneします。
SVN、Git、GitHub、Gitee、GitLabの違い
# SVN:中央集権型のバージョン管理システム。サーバーが必要で、サーバーが停止すると使用不可。
# Git:分散型のバージョン管理システム。各クライアントがサーバーとして機能可能。サーバー障害時でも管理可能。
# GitHub:世界最大のオープンソースリポジトリ。コードを公開する場合に使用。
# Gitee:中国最大のオープンソースリポジトリ。プライベートリポジトリには有料プランが必要。
# GitLab:企業内部向けのリモートリポジトリ。運用チームが構築・保守します。
Gitの作業フロー
# フローの流れ:
1. Gitによって管理されるファイルに変更(追加、削除、編集)があると、赤色で表示されます。
2. 変更内容をステージングエリアに移動させると緑色になります。
3. ステージングエリアからバージョン管理システムにコミットすることで、過去の状態に戻すことが可能になります。
4. バージョン管理システムの内容をリモートリポジトリにプッシュして統合管理します。
5. ローカル環境からリモートのコードを取得できます。
6. ローカルのコードをリモートにプッシュできます。
# 注意事項:
"""
1) 赤い変更点がある場合、addコマンドを実行
2) 全ての変更が緑色になった場合のみcommitを実行
3) バージョン管理されたファイルのみ、履歴を遡ることができます。
"""
Gitの基本コマンド
初期化
プロジェクトのルートディレクトリでコマンドプロンプトを開き、git initを実行すると、現在のフォルダがGitリポジトリになります。
状態確認
IDEのコンソールまたは右クリックメニューのGit Bashでgit statusを実行します。
ユーザー情報の設定【ローカル設定優先、次にグローバル設定、どちらもない場合はエラー】
ローカル設定:現在のリポジトリのみ適用される。.git/configファイルに記録されます。
git config user.name 'liuqingzheng'
git config user.email '616564099@qq.com'
グローバル設定:すべてのリポジトリで共通。C:\Users\ユーザー名\.gitconfigに記録されます。
git config --global user.name 'lqz'
git config --global user.email '306334678@qq.com'
作業ディレクトリの内容をステージングエリアへ移動
コードを修正後、git statusを実行するとファイル名が赤くなります。その後、git add <ファイル名>または.(すべてのファイル)を実行することで、変更内容をステージングエリアに移動します。
ステージングエリアからバージョン管理へコミット【コメント必須】
ステージングエリアの内容をバージョン管理にコミットします。git commit -m 'コメント'で実行します。
バージョン履歴の確認【ローカルのバージョン一覧】
詳細表示:git log
簡易表示:git reflog
作業ディレクトリの変更を取り消す
git checkout . で変更前の状態に戻します。
ステージングエリアの内容を作業ディレクトリに戻す
git reset HEAD でステージングエリアから作業ディレクトリに戻します。
バージョン管理からステージングエリアに戻す
git reset --soft 前のバージョン番号 で戻します。
バージョン管理から作業ディレクトリに戻す
git reset --バージョン番号
git reset --mixed バージョン番号
git add . と git commit -m '' の操作を取り消します。
バージョン管理された最終状態に戻す
git reset --hard バージョン番号 で指定されたバージョンに直接戻ります。
重要なコマンド一覧
git init
git status # git status -s で簡略表示
git log
git reflog
git add .
git commit -m ''
git reset --hard バージョン番号
Gitによる無視ファイルの設定
# プロジェクト内には.pyファイルやnode_modules、.ideaなど、Gitで管理したくないものがあります。これらを除外するために.gitignoreファイルを作成します。
# 手順:
1. リポジトリのルートディレクトリに.gitignoreという名前のファイルを作成します(拡張子なし)。
2. ファイルやディレクトリを指定して除外します。
3. 構文例:
"""
ファイル名:すべてのディレクトリ内の同名ファイルを除外
/ファイル名:リポジトリルート直下のファイルのみを除外
例:
a.txt:プロジェクト内のすべてのa.txtを除外
/a.txt:ルートディレクトリのa.txtのみを除外
/b/a.txt:ルートディレクトリ内のbディレクトリのa.txtのみを除外
*x*:名前にxが含まれるファイルを除外(*は0個以上の文字列)
空ディレクトリはプッシュされませんが、空のパッケージはプッシュ可能です。
"""
複数ブランチでの開発
# 会社で3人が同じプロジェクト(例:ルフィ)を同時に開発している場合、一部の機能が完成しテスト環境にデプロイされた後、他のメンバーが継続的に開発を進めます。
# ブランチを使用することで、効率的な協働開発とバージョン管理が可能になります。
# ブランチ操作:
- ブランチの一覧表示:
git branch # *と緑色のものが現在のブランチ
- 新規作成:
git branch dev
- 切り替え:
git checkout dev
- 削除:
git branch -d dev # 他のブランチから実行する必要あり
- マージ:
masterブランチにdevをマージする場合:
git checkout master
git merge dev
- リモートブランチの確認:
git branch -a
リモートリポジトリとの連携
# GitHub:アクセス速度が遅い
# Gitee:中国のサービスで高速。会社でよく使われます。
# GitLab:社内用のリポジトリ。管理チームが構築します。
# Gitee:全員がアカウント登録後、リポジトリを作成し、コードをプッシュします。
# リモートリポジトリの作成:
- 名前だけ入力し、他は空白
- オープンソースライセンス:GPL、Apache
- GPL:自由に使用・修正可能だが、改変したコードは公開義務がある
- Apache:商用利用可能だが、使用したことを明示する必要がある
# ローカルコードをリモートにプッシュする手順:
- ローカルに既存のリポジトリがあり、リモートは空の場合
- ユーザー情報を設定(Contributors欄でアイコン表示に必要)
git config --global user.name "liuqingzheng"
git config --global user.email "306334678@qq.com"
- 既存リポジトリにリモートリポジトリを追加
git remote add origin https://gitee.com/liuqingzheng/lqz.git
- ローカルコードをプッシュ
git push origin master # ローカルのmasterをoriginにプッシュ
- 最初のプッシュ時は認証が必要(ID/パスワード)
- 後は認証なしでプッシュ可能(資格情報管理で設定変更可)
リモートリポジトリへのプッシュ(非空リポジトリ)
# 1. リモートリポジトリluffy_apiを作成(空でない)
# 2. git clone https://gitee.com/liuqingzheng/luffy_api.git でリモートをローカルにクローン
# 3. プロジェクトコードをluffy_apiフォルダにコピー(.gitはコピーしない)
# 4. git add .
# 5. git commit -m '初期化'
# 6. git push origin master
# 今後の開発手順:
- git add .
- git commit -m '機能完了:xxxファイルを修正'
- git pull origin master # リモート更新を取得(衝突防止)
- git push origin master # リモートにプッシュ
SSHによるリモート接続と共同開発
# HTTPSではなく、SSHを使ったリモート接続が一般的です。
# HTTPS vs SSH:
- HTTPS:ユーザー名とパスワードを入力し、認証情報として保存
- SSH:公開鍵・秘密鍵のペアを設定
# SSH設定手順:
- https://gitee.com/help/articles/4181 を参考に設定
- コマンドプロンプトで以下を実行すると、C:\Users\ユーザー\.sshに鍵が生成されます。
ssh-keygen -t ed25519 -C "メールアドレス"
- 生成されたファイル:
id_ed25519 # 秘密鍵(絶対に漏れない)
id_ed25519.pub # 公開鍵(誰にでも渡せる)
- 公開鍵をGiteeに登録
- これでSSH接続が可能になり、認証なしでプッシュ・プルが可能になります。
# 今後の操作手順:
- HTTPS接続を削除:git remote remove origin
- SSH接続を追加:git remote add bxf git@gitee.com:shangxin0v0/luffy.git
- git pull bxf master # SSH経由でプル
- git push bxf master # SSH経由でプッシュ
共同開発の手順
# 全員がGiteeアカウントを持っている場合、ルフィプロジェクトを共同開発します。
# 管理者はプロジェクトの開発者を追加します。
# あなたがプロジェクトのクローンを取得し、開発開始:
- git clone git@gitee.com:liuqingzheng/luffy_api.git
- PyCharmで開発を開始
- git add .
- git commit -m '新しい機能追加'
- git pull origin master
- git push origin master
コンフリクトの解決方法
複数人での同じブランチでの開発でコンフリクト
複数人が同じファイルの同じ箇所を編集し、一方が先にプッシュした場合、もう一方のプッシュ時にコンフリクトが発生します。
この場合、まずプルして変更内容を比較し、どちらのコードを残すか判断します。
同じ機能であれば、より良い方を残して、不要なコードを削除します。
ブランチマージ時のコンフリクト
masterブランチとdevブランチで同じ行を編集した場合、マージ時にコンフリクトが発生します。
Gitは両方の変更を表示し、手動で選択・統合する必要があります。
オンラインでのマージでも同様です。
PyCharmでのGit操作
リモートからのクローン
ステージング
コミット
プッシュ
プル
ブランチ操作
ログ確認
ローカルとバージョン管理の比較
詳細表示