- 投稿日:2020-01-15T23:28:26+09:00
Creating Twin Repositories
How to create a twins repository that includes both branch and tag. ??
Test environment
- git v2.17.1
Grammar
$ git clone --mirror <org_repository> $ cd org_repository $ git remote -v $ git remote set-url --push origin <new_repository> $ git remote -v $ git push --mirror <new_repository>Demo
- org_repository : https://github.com/sarojaba/awesome-devblog.git
- new_repository : https://github.com/leechungkyu/new-awesome-devblog.git
$ git clone https://github.com/sarojaba/awesome-devblog.git Cloning into 'awesome-devblog'... remote: Enumerating objects: 136, done. remote: Counting objects: 100% (136/136), done. remote: Compressing objects: 100% (88/88), done. remote: Total 7219 (delta 81), reused 87 (delta 48), pack-reused 7083 Receiving objects: 100% (7219/7219), 2.59 MiB | 2.28 MiB/s, done. Resolving deltas: 100% (4595/4595), done.$ cd awesome-devblog $ git remote -v origin https://github.com/sarojaba/awesome-devblog.git (fetch) origin https://github.com/sarojaba/awesome-devblog.git (push)
https://github.com/leechungkyu/new-awesome-devblog.git
✅ The repository must be created in advance.$ git remote set-url --push origin https://github.com/leechungkyu/new-awesome-devblog.git $ git remote -v origin https://github.com/sarojaba/awesome-devblog.git (fetch) origin https://github.com/leechungkyu/new-awesome-devblog.git (push)$ git push --mirror https://github.com/leechungkyu/new-awesome-devblog.git Delta compression using up to 2 threads. Compressing objects: 100% (2586/2586), done. Writing objects: 100% (7219/7219), 2.59 MiB | 1.52 MiB/s, done. Total 7219 (delta 4595), reused 7219 (delta 4595) remote: Resolving deltas: 100% (4595/4595), done. To https://github.com/leechungkyu/new-awesome-devblog.git * [new branch] master -> master * [new branch] origin/HEAD -> origin/HEAD * [new branch] origin/gh-pages -> origin/gh-pages * [new branch] origin/master -> origin/master? Result
- 投稿日:2020-01-15T21:10:41+09:00
WSL上のUbuntu 18.04 LTSでgit cloneができない問題への対処
- 投稿日:2020-01-15T20:05:19+09:00
【個人用】Command LineとGitで使われる本当に基礎的なコマンドや単語のまとめ
初歩的なコマンドや意味について、自分でもすぐ見返せるように簡単にまとめてみました。
それぞれのコマンドについてはあまり深堀ってはいません。
Command Line
ようはキーボードの文字だけでコンピューターを操作するもの。コマンド=命令。
正確にはCUIでコマンドを実行したい時、ターミナルを立ち上げたら黒い画面が出てくるが、それのこと(または画面上の行のこと)を指すよう。単語
ディレクトリ...フォルダのこと
ルートディレクトリ...ファイル階層の最初のディレクトリのこと。それまでのディレクトリは
/
で区切られる。ホームディレクトリ...ユーザーがログインした際の初期位置のディレクトリ。
~
で示される。カレントディレクトリ...現在いるディレクトリのこと
コマンド
touch ファイル名
ファイルを作成する
cat ファイル名
ファイルの中身を確認する
mkdir ディレクトリ名
ディレクトリを作成する(make directoryの略)
cd ディレクトリ名
ディレクトリを移動する。親→子のみ(change directoryの略)
cd ..
ディレクトリを移動する。子→親
cd
ホームディレクトリへ移動する。
pwd
カレントディレクトリ ~ ルートディレクトリまでを確認する(print working directoryの略)
ls
カレントディレクトリの中身(ディレクトリやファイル)を確認する(listの略)
mv ディレクトリ名(ファイル名) ディレクトリ名
指定したディレクトリに移動させる。先に書いたほうが移動させたいもの。ファイルでもディレクトリでもOK。後に書いたほうが移動先のディレクトリ。(moveの略)
mv ディレクトリ名(ファイル名) 新規ディレクトリ名(ファイル名)
ディレクトリ名またはファイル名を変更する。※同じmvコマンドでも後に書く方に既存のディレクトリ名を書くと移動、存在しないディレクトリ名を書くと改名となる。
cp ファイル名 新規ファイル名
既存のファイルを新しいファイルにコピーする。
cp -r ディレクトリ名 新規ディレクトリ名
既存のディレクトリを新しいディレクトリにコピーする。
rm ファイル名
ファイルを削除する
rm -r ディレクトリ名
ディレクトリごと削除するGit
Gitはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
(Wikipediaより)単語
ローカル...自分のPC
リモート...離れたところのPC
リポジトリ...ディレクトリやファイルの変更を管理する場所
コミット...記録すること
リモート...共有ファイルの置き場。Githubなど
プッシュ...リモートに送信 例)Githubにpushする
プル...リモートから受信 例)Githubからpullする
※タイトル通りあくまで自分でこう置き換えたら覚えやすいかな、という考えに基づいています。
コマンド
git init
gitを使う時に初めに入力するもの(initializedの略。初期化の意味)
git add
対象となる共有したいファイル(ディレクトリ)の選択
git commit -m "メッセージ"
選択したファイルを記録する。※メッセージはコミットメッセージといい、他の人が見ても分かるように分かりやすく書く。
ここまでで共有する準備が完了する。
git remote add origin URL
リモートに登録するときのコマンド。originはリモート名といい、一般的にはoriginを使う。
git push origin master
リモートに登録したあと、ファイルをアップロードするのに使うコマンド。アップロード=プッシュする
git pull origin master
同様にこのアップロードされたファイルをダウンロードするのに使うコマンド。ダウンロード=プルする
git status
どのファイルを変更したかを確認する(変更があったファイルは赤で表示される。また、変更があったファイルのうち、addされたものは緑色で表示が変わる)
git diff
変更の内容を確認する(赤色が変更前のコード、緑色が変更後のコードとなる)
git log
コミットメッセージ、コミットの履歴を確認する
git log -p
コミットの履歴と変更内容を確認するざっとこんなところで。気が向いたら追加していきます。
- 投稿日:2020-01-15T18:27:08+09:00
Mergeしたプルリクを間違えてRevertしてしまった時の対応
- 投稿日:2020-01-15T14:33:00+09:00
Git を普段から使い倒し 1ヶ月で余裕で使える状態にする
Git とは
分散型バージョン管理システムです
まあそんなことは
どうでもいいので、とりあえず使うところから始めましょう
前提
- git をコマンドラインで使える状況であること
- Windows であれば Git for Windows をインストール
- Mac であれば
brew install git
(homebrew をインストールしている前提)GUI で git を使うものは裏側で何の処理をやっているのか分からない不安な物が多い (分かろうとしていないなだけかもw)
適当に git のローカル議事録置き場を作る
例:議事録置き場
└── Documents └── Minutes
Document/Minutes に移動し git 初期化
$ cd Documents/Minutes $ git initこれで準備完了
よく使う確認コマンドとして、git status
git log
git diff
git show
git grep
があります。
アジェンダを残します
$ vim 20200115-SRE-cost-down-MTG.md ## アジェンダ 1. ほげ: 卜部 (10分) 2. ふが: 真一 (5分) 3. うぎゃー: 発表者未定 (10分)
作りかけなのですが、コミットします。
ファイルをステージに追加し、"アジェンダ作りかけ" という説明でコミットします。
$ git add 20200115-SRE-cost-down-MTG.md $ git commit -m "アジェンダ作りかけ"
おや、修正が必要となりました
3.
は決定ではないですが、1.
は決定で以下のように修正してほしいとのこと$ vim 20200115-SRE-cost-down-MTG.md ## アジェンダ 1. ほげほげほげ: 卜部 (10分) 2. ふが: 真一 (5分) 3. うぎゃー: たろう (10分)
以下のようにコミットしましょう
$ git add -p # (1/1) Stage this hunk [y,n,q,a,d,s,e,?]? のように 聞かれます。 # 決定した 1 だけコミットしたいので s で応答し、分割する範囲をさらに絞ります。 # 1 の差分の選択肢がでましたら y (yes)、 3 の差分の選択肢がでたら n (no) を選びます $ git commit -m "○○先輩からの 1 の修正事項を反映"
おやおや、さらに修正が必要となりました
3.
はまだ決定ではないですが、2.
は決定で以下のように修正してほしいとのこと## アジェンダ 1. ほげほげほげ: 卜部 (10分) 2. ふが: はなこ (10分) 3. うぎゃー: たろう (10分)
3の修正が邪魔なので、以下のように対応します
※
git add -p
のコマンドの癖をつけておくと、普段から関係のないコミットがまざらなくなるので便利$ git stash save "決定していない修正" # コミットされていない 3 の修正を退避 $ vim 20200115-SRE-cost-down-MTG.md # エディタで 2 を修正 $ git add -p # 2 の修正を選択 $ git commit -m "★★先輩からの 2 の修正事項を反映"
3 の内容が先程退避した内容で決定したとのこと
$ git stash list # 先程退避した修正を確認 $ git stash show stash@{0} -p # 表示された退避分の差分を確認 $ git stash pop stash@{0} # 退避した差分を戻す $ git add -p # 差分をステージに反映 $ git commit -m "○○先輩からの 3 の修正事項を反映"
別の MTG のアジェンダを考える必要がでてきました
コミットを混ぜたくないので、別のブランチを作って作業を行います。
$ git checkout -b feature/20200201-SRE-security-MTG # アジェンダを残します $ vim 20200201-SRE-security-MTG.md ## アジェンダ 1. AWS の人からサービス紹介: Mr.AWS (10分) 2. OZV 側から質技応答: 真一 (15分) $ git add 20200201-SRE-security-MTG.md $ git commit -m"AWS の人との MTG アジェンダ"
それぞれ MTG が終わったので、master ブランチにマージします
$ git checkout master $ git merge feature/20200201-SRE-security-MTG --no-ff
便利機能: gitconfig
git には .gitconfig をいう自分用の設定をエイリアスなどで定義することができます
こちらの gist の
~/.gitconfig
の設定を参考に alias を追加してみましょう。上記の エイリアス追加後、以下のコマンドを打ってみましょう
$ git l # コミットログが グラフ表示されます (gitk と打つと gui のグラフを人によっては表示できます) $ git di # 単純に git diff のエイリアスです
便利機能: 別サービスからパッチファイルを作り、適用しよう
$ git clone https://github.com/php/php-src.git $ cd php-src $ git format-patch 127d6f3f39235478d124635822343c2cd1205f4d..f6fbe13717c817cd9b4761bfad9f62fd8d3fa6b4 $ ls *.patch # バッチファイルが2つほど作成される $ git checkout -b hogehoge 127d6f3f39235478d124635822343c2cd1205f4d $ cd .. $ git clone -b hogehoge php-src new-php-src # hogehoge ブランチベースで関係のないリポジトリを作る $ cd new-php-src; rm -rf .git; git init; git add .; git commit -m"全然違うリポジトリ" # 関係のないリポジトリを初期化 $ cp -v ../php-src/000*.patch . $ git am -3 *.patch # パッチが順番に適用される $ git l # 履歴ができた
便利機能: git-grep
高速に grep できるので便利です。
$ git grep -i "urabe" # 大文字小文字区別しない $ git grep -E "[a-z]+0(1|hoge)" # 正規表現 $ git grep -w "urabe" # 単語として検索 -> urabebebebe はヒットしない $ git grep -B2 "urabe" # ヒットした文字プラス前2行を表示 $ git grep -A2 "urabe" # ヒットした文字プラス後2行を表示 $ git grep -C2 "urabe" # ヒットした文字プラス前後2行を表示 $ git grep -e "urabe" --and -e "shinichi" # and 検索: 同じ行に該当2つの文字列がある $ git grep -e "urabe" --or -e "shinichi" # or 検索: 同じ行にいずれかの文字列がある $ git grep -l "urabe" # ヒットしたファイルをだす $ git grep -c "urabe" # ヒットした件数をだす $ git grep "urabe" -- src/AppBundle # src/AppBundle 配下だけ検索 $ git grep "urabe" -- ':!src/AppBundle' ':!src/HogeBundle' # src/AppBundle と src/HogeBundle は検索対象としない $ git grep -W "urabe" # 該当箇所が含まれる関数のスコープで検索 $ git grep --untracked "urabe" # バージョン管理外のファイルも検索
- 投稿日:2020-01-15T10:47:26+09:00
GitHubのプルリク時とかで、特定のcommit間の差分を出す (ブランチ同士も可
プルリクなんかで差分見せる時に、どこを見せたらわかりやすいかなと悩むことがある。
その場合、複数commitをまたいで、特定のcommit 2点間でdiffを取れたので報告。compare
URLで指定するのが早そう。
https://github.com/<USER>/<REPOSITORY>/compare/<COMMIT HASH>...<BRANCH>
上記のように、repository名のあとに、compareとして、比較したい2つのコミット、ブランチを
...
でつなぐ。
ここの指定については、git diff
の指定と同様にできそう。diffの指定例$ git diff 114514b fa52110
上記の
git diff
の例のように、コミット間でもブランチ間でも、ok
- 投稿日:2020-01-15T10:20:41+09:00
SourceTreeSetup-3.3.6を導入、Cloneエラー解決
指定リポジトリをクローン時に Failed connect to BitBucket.org:443 エラーが出た
調べたところ下記で解決(※Googleログインでアトラシアンにログイン後)
ツール -> オプション -> ネットワークで
Git/Mercurialにプロキシサーバー設定を追加にチェックを入れる。
↓
cloneできた。