概要:
- Gitでソースコードを管理するための環境構築
- GitHubもしくはGitLabアカウント保有
- Ubuntu20.04(WSL2)
毎回忘れて逐一調べることメモ
基本の流れは「add」→「commit」→「push」になります!以下でなにか上手くいかないと思ったら、この3ステップをちゃんとこなしているか確認してみてください。SVNを使い慣れてGitに移行してきた方は、pushを忘れがちになるので特に気を付けて!
ローカルディレクトリ ⇒ リモートアップロード
状況:
- ローカルで作成したディレクトリをリモートのGitHubのリポジトリへアップロードしたい
作業手順
全体の流れ:
- GitHub側でリポジトリ作成
- ローカルディレクトリの初期化作業
- ローカルディレクトリのアップロード
GitHub側
1.GitHubアカウントにログイン
2.New Repositories作成
リポジトリの名前に関しては、リポジトリ名と作業ディレクトリ名を合わせたほうが作業をする方としては分かりやすい気がするが特に制約はなく、同じでなくても良い。
このあたりの設定はお好みで、READMEを最初に作らなければ以下のような手順が出てくるので、今回触れる箇所で少し躓くこともありますが、作業ディレクトリに移動してほぼこれに従うだけ
READMEなどを最初に作ると、これが出てこない(もしかしたら出せるかも)ので、改めて以下で躓き箇所も含めて手順を列挙
作業ディレクトリ側
3.作業ディレクトリに移動
「work_space/」をアップロードしたいときは、「work_space/」に入る。
4.ディレクトリの初期セットアップ
コマンド:
git init
Initialized empty Git repository in 作業ディレクトリ名
「.git」ファイルなどが作成される
5.「.gitignore」とかを作る(任意)
コマンド例:
touch .gitignore
便利なサイト:
6.ステージエリアにファイルを追加
コマンド:
git add ディレクトのパス
7.追加・変更したファイルをGitに登録
コマンド:
git commit -m"first commit"
コミットがうまくいかない場合
⇒ Please tell me...
commitしたとき想定外のファイルまで登録したとき
⇒ 補足:コミット取り消し
問題なくコミット
⇒ 手順8
Please tell me who you are
出力内容例:*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
<現状確認>
ユーザー名:
git config user.name
git config user.email
<登録>
ユーザー名:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
これらが登録出来たら、もう一度commitする。
8.新しいリモートを追加
コマンド:
git remote add origin リポジトリのURL
9.現在のブランチの確認
コマンド:
git branch
GitHub/GitLabは新規に作成されるリポジトリのデフォルトブランチ名が「main」だが、ローカル環境では「master」になっていることが多い気がする
masterのままpushする場合
⇒手順10へ
元からmainだった場合
⇒手順11へ
mainにブランチ名を変える場合
⇒手順12へ
10.ブランチ名「master」でpush
コマンド:
git push -u origin master
エラー
⇒ エラー:rejected...
11.ブランチ名「main」でpush
コマンド:
git push -u origin main
エラー
⇒ エラー:rejected...
12.ブランチ名を「master→main」に変えてpush
ブランチ名を変更:
git branch -m master main
git branch
git push -u origin main
エラー
エラー:rejected...
エラー:! [rejected]
出力内容例:
! [rejected] main -> main (fetch first)
error: failed to push some refs to "URL"
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
解決法としては2つある。
- fetchしてmergeしてpush
- 強制的にpush
以下では、ブランチを「main」としたときの例を示す。
方法1.fetchしてmergeしてpush
以下のコマンドでfetchすることで、リモートレポジトリのコミット履歴をすべて取得する。
ただし、まだマージ(統合)はしていない
git fetch
git merge
git push -u origin main
方法2.強制的にpush
最後に「-f」をつけることで強制的リモートの履歴を上書きしてプッシュする方法
git push -u origin main -f
リモートリポジトリ ⇒ ローカルクローン
状況:
- ローカルに作業しているディレクトリが無く、これから作成するリポジトリを使用して作業環境を整えたい
- すでに作成しているリポジトリをローカル環境に持ってきたい
作業手順
全体の流れ:
- リモートでリポジトリを作成または、クローンするリポジトリを決める
- ローカルにリポジトリをクローン
- ローカルからリモートへプッシュ(補足あり)
GitHub側
1.GitHubアカウントにログイン
2.New Repositories作成または、クローンするリポジトリ決定
リポジトリを作成する手順は「ローカルディレクトリ⇒リモートアップロード節」参照
作業ディレクトリ側
3.リポジトリのクローン/フォーク
<4パターン>
他者リポジトリclone→セルフリポジトリpush
⇒ 補足
複数人で1つのリポジトリを共同作業
⇒ 補足
他者リポジトリclone→他者リポジトリpush
作業ディレクトリを作りたい場所まで移動して、以下コマンドを実行
コマンド:
git clone リポジトリのURL
4.なにか編集してみる
コマンド例:
touch .gitignore
5.ステージエリアにファイルを追加
コマンド:
git add ディレクトリパス
6.追加・変更したファイルをGitに登録
コマンド:
git commit -m"コメント"
コミットがうまくいかない場合:
⇒ Please tell me...
7.ブランチ名確認
コマンド:
git branch
8.リモートに変更をpush
コマンド:
git push origin ブランチ名
補足
作業中のちょっとしたミスへの対処および、疑問点についての補足
「git commit」の取り消し
pushする前のcommitとaddを1つ取り消し:
git reset --mixed HEAD^
commitとaddの取り消し
「--soft」:
commitのみ取り消し
「--hard」:
作業ツリー上の変更もすべて取り消し
コミット履歴/IDの確認:
git log
参考:
- https://www-creators.com/archives/1116
- https://tech-blog.rakus.co.jp/entry/20210528/git
- https://qiita.com/ymzkjpx/items/00ff664da60c37458aaa
- https://git-scm.com/book/ja/v2/Git-の基本-コミット履歴の閲覧
複数人でリポジトリを共有作業環境とする
共同編集者設定を行う:
- 対象リポジトリへ移動
- 上メニューバー「Setting」
- 左バーの「Collaborators」
GitHubのcollaboratorsはプッシュやマージの権限を持った人のこと。リポジトリのcollaboratorに人を追加することで共同編集者を追加可能で、プッシュなどの権限を与えることができる。
参考:
https://qiita.com/takeokunn/items/5bc499121a21f8c5b990
https://qiita.com/future_kame/items/9fa256aea09faa28b357
http://www.y2sunlight.com/ground/doku.php?id=github:collaborator
他人のリポジトリへのpush
いわゆるプルリクエストとかいうもの
全体の流れ:
- 他者リポジトリをフォーク
- フォークして自分管理のリモートにできたリポジトリをクローン
- 新しいブランチを作る(フォークした場合はいらないかも)
- 編集作業
- add、commit、push
- GitHub上でPullRequestを送る
通常は他者のリポジトリにプッシュすることはできません。
詳しい内容については、以下の参考URLなどから識者の方がまとめてくださっているものをありがたく見たほうがいい。
参考:
- https://qiita.com/matsubox/items/09904e4c51e6bc267990
- https://qiita.com/samurai_runner/items/7442521bce2d6ac9330b
- https://phoeducation.work/entry/20210913/1631487480
- https://qiita.com/YumaInaura/items/acff806290c8953d3185
他者リポジトリクローン⇒任意リポジトリへプッシュ
1.自分のリモートリポジトリを作成
リポジトリ名に関しては、何でもよい
2.他者リポジトリをローカルにクローン
コマンド:
git clone クローンするリポジトリURL
3.現在のリポジトリのURL確認
コマンド:
git remote -v
4.対象リモートリポジトリの変更
コマンド:
git remote set-url origin 変更したいリポジトリURL
5.ソースコードを修正してadd、commit
コマンド:
git add ディレクトリパス
git commit -m"message"
6.変更をプッシュ
コマンド:
git push origin ブランチ名
参考:
普段よく使うコマンドまとめ
コマンド:
git add ディレクトリパス
git commit -m"change"
git push origin ブランチ名
例)「git push origin main」
以上