- 1. コミット、プル、プッシュって何?
- 2. WSL(Powershell)プロンプトにGit情報を常に表示させる方法
- 3. 【Git】Qiita CLIを使う
- 4. (ハンズオンで学ぶ)Git入門
- 5. devcontainer内でホストのSSH鍵を使ってgitを使うときにハマったメモ
- 6. Git でリモートリポジトリに SSH 接続する際に任意の秘密鍵を指定する
- 7. 【Git】サブモジュールの変更を反映する方法
- 8. GitHubのOrganization配下リポジトリがクローンできない場合の対処
- 9. GitとGitHubを家の建築に例える解説(補足)
- 10. Git で squash merge後にmergeされたコミットを含むbranchがコンフリクトするのを解決する
- 11. git statusで表示されるファイルのステータスの色を変更する[Git][gitconfig]
- 12. 【初心者】Git hub使用方法
- 13. githubにsshで接続する方法
- 14. GitにあげたファイルはPCから削除しても大丈夫?PCの容量を気にする人へ
- 15. .gitignoreにファイルを追加したが反映されなかった時の対処法
- 16. .gitignoreってなに?
- 17. Gitでファイル毎のコミット数をカウントする
- 18. Gitコミットを一つ前に戻す方法
- 19. Gitのリモートブランチとローカルブランチについて
- 20. 長期インターンで学んだことについて
コミット、プル、プッシュって何?
# はじめに
GitやSVNを使っていて、コミット時に何処が更新されるのか挙動が違うので図にしてみました。
マージなどの挙動は追々更新する予定です。## Git
プッシュしないとサーバーに反映されない。
コミットしてもブランチを作ってもローカルリポジトリ内の話なので、サーバーに反映させるにはプッシュする必要がある。“`mermaid
sequenceDiagram
box rgb(255, 255, 239) ローカル
participant 一時退避
participant ワークツリー
participant ローカルリポジトリ
end
box rgb(239, 255, 239) サーバー
participant リモートリポジトリ
end
リモートリポジトリ ->> ワークツリー: プル
リモートリポジトリ ->> ローカルリポジトリ: フェッチ
ワークツリー ->> ローカルリポジトリ: コミット
ローカルリポジトリ ->> リモートリポジトリ: プッシュ
ワークツリー ->> 一時退避: スタッシ
WSL(Powershell)プロンプトにGit情報を常に表示させる方法
こんにちは、プログラミング初心者のマドレーヌです。
かめ@米国データサイエンティストさんのGIT講座をWINDOWSで受講しています。上記講座はMAC向けの講座であり、WINDOWSで進める場合躓く箇所が多々あります。
自分の解決方法を備忘録的に書き連ね共有していこうと思います。今回は「ターミナルのプロンプトにGit情報を常に表示させる【超便利】」
をWSLに適用させる方法を説明します。ステップ1:シェルファイルを配置
シェルファイル(https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh) をダウンロードします。
シェルファイルの配置位置ですがWSLの場合、ホームディレクトリに置く必要があります。
以下のコマンドをWSLに入力します。`cp /mnt/c/Users/ユーザー名/Downloads/git-prompt.sh ~/.git-prompt.sh`
ステップ2,3は必要な
【Git】Qiita CLIを使う
# はじめに
こんにちは、10/6から毎日投稿(時差があるため若干ずれているものもあります)してます。
アウトプットする内容がなくならないように、インプットも頑張ります。
最近`Qitta`でブログを投稿するようになり、投稿のボタンを押すたびに「`Github`で記事を管理する」が目に入っていたので`Git`の基礎を学んだら使ってみようと思いました。
そこで今回はすでに`Qiita CLI`を使っている方やこれから使う方に向けて、いろいろ書いていこうと思います。環境:
OS:`windows 11`
Terminal:`Gitbash`
`Node.js -v 20.18.0`# Qiita CLIとは
`Qiita CLI`を使うと以下のことができます。
* CLI操作で`Qiita`の投稿を自分の指定したディレクトリに保存することができる
* CLI上で記事の投稿ができる(削除はできない)
という感じです。
つまり、`Qiita`を一種のリモートデポジトリのように扱える機能っていえばいいんですかね、?
詳しい`Qiita CLI`のセット方法は[こちら](http
(ハンズオンで学ぶ)Git入門
## What is git ?
Gitとはソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システム(Wikipediaより)
https://ja.wikipedia.org/wiki/Git## Terms
– Git : 上記バージョン管理システムのこと
– GitHub : Gitを共有しgit flowによる開発を可能にするウェブ
– repository : 管理するシステムの区分。ルートフォルダ。
– branch : リポジトリに対する変更を元のリポジトリから分岐させること。その操作を”branchを切る”という。
– ローカルリポジトリ : コンピュータ上でのみ存在するリポジトリ
– リモートリポジトリ : ネットワーク上に存在するリポジトリ## Install
https://gitforwindows.org/ からGitForWindowsをダウンロードし, ウィザードに従ってインストールする
(インストール手順参考:https://qiita.com/T-H9703EnAc/items/4fbe6593d42f9a844b1c)
devcontainer内でホストのSSH鍵を使ってgitを使うときにハマったメモ
# 前置き
https://code.visualstudio.com/remote/advancedcontainers/sharing-git-credentials上記の資料を参考に、devcontainerを使う時にホスト側のgitの認証情報を使って操作できる環境を構築していたのですが、自分の環境をいろいろ汚しすぎていて予想外のところでたくさんハマったので参考になればと思い残しておきます。
# 結論
– 複数のGithubアカウントでsshするのをやめる
– 公開鍵はパスフレーズのない公開鍵を作る
– user.nameとuser.emailはglobalで変えておく# 環境
windows + wsl2(ubuntu 22.04LTS) + docker desktop# 複数のGithubアカウントでsshするのをやめる
https://qiita.com/yampy/items/24638156abd383e08758~/.ssh/configを使って複数のgithubアカウントを使い分ける設定をしていました。
git cloneする時は`git@
Git でリモートリポジトリに SSH 接続する際に任意の秘密鍵を指定する
## やりたいこと
Git でリモートリポジトリに SSH 接続する際、デフォルトの秘密鍵 (`~/.ssh/id_rsa` や `~/.ssh/id_ed25519` など) ではなく任意の秘密鍵を指定したい。
## 方法
`core.sshCommand` を設定する。以下の例の `~/.ssh/id_ed25519.quanon` を実際に指定したい秘密鍵のパスに置き換えること。
“`shell-session
$ git ls-remote origin # リモートリポジトリにアクセスできない。
ERROR: Repository not found.
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.$ git config –add –local core.sshCommand ‘ssh -i ~/.ssh/id_ed25519.quanon’
$ git
【Git】サブモジュールの変更を反映する方法
以下のコマンドを実行することでサブモジュールの変更を取り込むことができます。
“`shell
git submodule update –remote
“`上記の場合にはすべてのサブモジュールの変更を取り込みますが、特定のサブモジュールのみの変更を取り込みたい場合には以下のように実行します。
“`shell
git submodule update –remote
“`https://arc.net/l/quote/lssbbcvw
GitHubのOrganization配下リポジトリがクローンできない場合の対処
### 結論
GitHubのOAuthアプリ認証設定をOFFにする。
(不特定/多数のメンバーが入るOrganizationではやめた方が良い)### 問題
普段利用しているMacbookのSourceTreeアプリから、招待されたOrganization内のリポジトリをクローンしようとしたところ、`Repository not found`エラーが出てクローンできなかった。※自分が作成したリポジトリ(private, publicいずれも)や、他の組織の作成したリポジトリはクローンできていた。
### 環境
Macbook Pro 16inch(M1 Max)
macOS Monterey
GitHub
SourceTree### 試したこと(解決しなかった)
– #### GitHub Organizationの権限変更
自分のOrganizationでの権限がMember権限だったのをOwner権限に変更した。– #### Organizationのベース権限をWriteにした。
設定 > Member privileges >
GitとGitHubを家の建築に例える解説(補足)
# GitとGitHubを家の建築に例える解説
ソフトウェア開発におけるGitとGitHubの概念を、家の建築プロセスに例えて説明します。
## 動画で見たい方はこちら
## 1. Gitは家の設計図・施工管理システム
**Git**を家の建築に例えると、Gitは**設計図**や**施工管理システム**のようなものです。以下のように
Git で squash merge後にmergeされたコミットを含むbranchがコンフリクトするのを解決する
# 問題
`feature-branch-a` から生やした `feature-branch-b` で開発中に、`feature-branch-a` が `main`にマージされると `feature-branch-b`が`main`とコンフリクトする。
特にSquash Mergeを使っていると起こる
# 解決方法
自分のローカルに `feature-branch-a`が残っていれば、以下の用にすることで、`feature-branch-a`と`feature-branch-b`の差分を`origin/main`に乗せることができる。
“`
g rebase –onto origin/main feature-branch-a feature-branch-b
“`# その他
feature branchでなくても、自分が作業していたPRをマージした後に、同じbranch上で続けて作業コミットを載せてしまい、これもPR作成時にコンフリクトが発生する。
この場合は上のやり方をブランチで見ていると修正方法がわからなくなるが、このケースは以下のようにすれば解決できる
git statusで表示されるファイルのステータスの色を変更する[Git][gitconfig]
`git status`コマンドを打ったときに表示されるファイルの色が下のように非常に見にくいので色を変更したいなと思い、やり方を調べてみました。
![スクリーンショット 2024-10-01 10.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/1f121b64-20c7-2e5a-89d1-88eb1d96b910.png)
# .gitconfigを編集する
`.gitconfig`を編集することで色を変更することができます。
`.gitconfig`はホームディレクトリにあるはずです。
:::note
### `.gitconfig`が見当たらない場合
`.gitconfig`がもしない場合は、ホームディレクトリ配下に作ってください。Windowsは、`C:\Users\
`
Macは、`~`になります。
:::`.gitconfig`を以下のように設定します。
“`.gitconfig
[color “status”]
【初心者】Git hub使用方法
## やること
pythonで作ったプログラム(仮想環境以外)をgitにアップロードする。
アップロードしたものを更新する。## アップロード手順
C:\Users\sharisa\Videos\ラズベリーパイIpad
本日はここの下の階層をGitにアップロードすることとする。まずgithubにアクセス
https://github.com/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/aac77257-7e9c-59a7-be13-0e25ec396cae.png)New repositroryを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882753/6d18a933-591b-02bb-8691-5e934f2dee9f.png)
Repository nameを任意の文字に変更する。日本語は多分ダメ。
![image.png](https
githubにsshで接続する方法
目的
—
GitHubとのSSH接続設定と、ローカルリポジトリをリモートリポジトリに接続してプッシュする流れです。1.ローカルリポジトリの作成
“`bash
# 既にリポジトリがある場合は、不要
git init
“`2.秘密鍵の作成
すでに秘密鍵がある場合は不要です。新しく作成する場合:
“`bash
ssh-keygen -t rsa -b 4096 -C “example@example.com” -f ~/.ssh/git_key_test
“`3.SSH接続設定ファイルの編集
SSH接続に使用する秘密鍵を指定するために、~/.ssh/config ファイルを編集します。
“`
vi ~/.ssh/config
“`設定内容:
“`bash
Host github github.com
HostName github.com
IdentityFile ~/.ssh/git_key
User git
“`
※ここで、IdentityFile のパスは、前ステップで生成した秘密鍵のパス(例: ~/.ssh/git_key_test)を指
GitにあげたファイルはPCから削除しても大丈夫?PCの容量を気にする人へ
## はじめに
– 「PCの容量が足りなくて困っている!そんな時、GitにあげたファイルをPCから削除してもいいの?」という疑問を解決します。
– Git初心者でも理解できるように、基本的な流れや注意点をまとめました。## Gitにあげたファイルの仕組み
– Gitにあげる(git push など)というのは、**リモートリポジトリ**(GitHubなど)にファイルをアップロードすることです。
– あげたファイルはリモートリポジトリ上に安全に保存されますが、**ローカルリポジトリ**(PC上)にもコピーがあります。## PCから削除することは可能?
#### 結論: PC上からファイルを削除することは可能
ただし、削除後にプロジェクトを編集する必要が出た時、そのファイルを手元で確認できなくなります
どうしてもPC容量を減らしたい場合は、リモートにあげた後、PC上から削除する方法があります。## 手順
#### 1. ファイルをコミットしてリモートにプッシュする。
“`bash
git add .
git commit -m “ファイル追加”
git push origin
.gitignoreにファイルを追加したが反映されなかった時の対処法
## 問題
.gitignoreファイルへgithubに公開したくなかった.envを追加したが、反映されず、.envが公開されたままになってしまっていた。
## 解決策
以下のコマンドを入力し(どちらでもよい)、キャッシュを削除してからコミット・プッシュした。
“`
$ git rm -r –cached
$ git rm -r –cached ファイル名 //これでもよい
“`
## まとめ
このような問題は経験して慣れるしかないと思ってます。開発する中でこのような問題を経験として吸収することが大事だと思います。
.gitignoreってなに?
# はじめに
プロジェクトを作成した際によく見る`.gitignore`という名前のファイル。
今までは見たことあるなあぐらいの感覚で、こいつが何者なのかはしっかり把握してませんでした。
たまたま触れる機会があったのでこの機会に役割と使い方をまとめておきます👍# .gitignoreとは?
“.gitignore“とは、Gitで管理しないファイルやディレクトリを指定するためのファイルです。
プロジェクトのルートディレクトリに配置され、無視したいファイルやディレクトリのパスをリスト形式で記述します。
ワイルドカードや否定記号を使って、より柔軟に指定することも可能です。
([perplexity](https://www.perplexity.ai/)に聞いてみた内容を引用してます)# メリット
`.gitignore`を使用するメリットは以下の通りです。
* **不要なデータの排除**
不要なファイルがリポジトリに含まれないため、コードレビューや共同開発が容易
* **セキュリティの向上**
公開したくない情報をGit管理から除外することによるセキュリティの強化
* **容量
Gitでファイル毎のコミット数をカウントする
Gitのリポジトリにて、ファイル毎の大まかなコミット数を手軽にカウントできないか試してみたところ、一応は下記コマンド(カウント数の多い順で出力する場合)で実現できました。
ただし、リネームによる変更前後のファイル名の組み合わせもカウント対象となります。
“`sh:ファイル毎のコミット数カウント
git whatchanged –oneline | sed ‘/^[^:]/d’ | cut -f 2-3 | sort | uniq -c | sort -r
“`更にコミットメッセージをカウント対象としても良いのなら、次のように簡略化できます。
“`sh:ファイル毎のコミット数カウント簡易版
git whatchanged –oneline | cut -f 2-3 | sort | uniq -c | sort -r
“`# 処理内容
まず、“`git whatchanged“` コマンドでコミットとそのコミットで変更したファイルの情報が出力され、“`–oneline“` オプションを指定する事でコミットの情報部分が 1行になります。
出力内容か
Gitコミットを一つ前に戻す方法
## 方法
以下2パターン。
両方とも、現在のコミットから1つ前のコミット(`HEAD^`)にリセットするコマンドですが、影響範囲が異なります。### 1. `git reset –hard HEAD^`
– コミットを一つ前の状態に戻す
– コミット前の変更は全て破棄される(全てのファイルが一つ前のコミットの状態に戻る)### 2. `git reset –soft HEAD^`
– コミットを一つ前の状態に戻す
– コミット前の変更したファイル(ステージングされたファイル)は保持される
※コミットをやり直したいとき(例えばコミットメッセージを修正したい場合)に便利## まとめ
– **`–hard`**: すべての変更を破棄して、過去のコミットに戻す。
– **`–soft`**: コミットだけを取り消し、ステージングされた変更やワーキングディレクトリの変更は保持。
Gitのリモートブランチとローカルブランチについて
インターンシップでメンター社員の方からGitについて教えていただいた際、これまでいまいちわからなかったリモートブランチとローカルブランチについて理解が深まったので簡単に解説します。
長期インターンで学んだことについて
はじめに