20200911のGitに関する記事は5件です。

【対処法】Can’t automatically merge.�とThis branch has conflicts that must be resolvedが出た時の対処法

Github上でプルリクエストを送信する際、

Can’t automatically merge.
スクリーンショット 2020-09-11 14.56.56.png
This branch has conflicts that must be resolved
スクリーンショット 2020-09-11 14.58.19.png

というコンフリクトが発生する場合があります。
初めて目にした時は慌ててしまうかも知れませんが、解決方法は難しくありませんので落ち着いて対処していきましょう。

対処法

このようなコンフリクトが発生した場合、Github上だけで対処することが可能です。

上記画像2枚目の、

This branch has conflicts that must be resolved

というメッセージの横にある、

Resolve conflicts

というボタンをクリックします。
すると、コンフリクトが発生しているファイルが一覧で表示されるので、一つ一つ修正をしていく流れになります。
(ここは画像のキャプチャを忘れてしまいました…すいません)

今回のケースでは、マージしたいブランチ名をbranchA、マージされる側のブランチをmasterだとして、以下のように修正ポイントが表示されます。

<<<<<<< branchA
aaaaa
=======
bbbbb
>>>>>>> master

この場合は、

・不要なコードを削除する
・どちらも必要なコードであれば、

<<<<<<< branchA
=======
>>>>>>> master

↑上記の記述のみを削除する

などを行う事でコンフリクトが解消され、右上にある「Mark as resolved」というボタンが開放されて、マージできるようになります。

ここまでの流れでコンフリクトは解決できます。

慌てて変なコマンドを大量に実行したりしてしまうとどんどん泥沼にハマっていく可能性があるので、落ち着いて対処するのが吉ですね。

今回の問題は以下の方の記事を参考に解決させていただきました。
分かりやすく記載されているので、併せてご確認ください。

[Git] コンフリクトの治し方
https://qiita.com/hkengo/items/f47b9f50ac2dca407d12

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SourceTree を利用したローカル/リモートリポジトリの管理

概要

SourceTree を利用して、git で作業ディレクトリ(ローカルディレクトリ/リモートディレクトリ)を管理する方法についてまとめる。

前提知識

ターミナルで git/github を管理する方法

環境

Sourcetree for Mac 2.7.6
(version 3 以降はアカウントを複数作成する必要があるようなので 2 系の最新版を利用)

ローカルディレクトリの管理

git init //フォルダをバージョン管理の対象にする

1.[新規] → [ローカルリポジトリを作成] をクリック
スクリーンショット 2020-09-11 9.39.33.png
2. [ローカルリポジトリを作成] ウィンドウでバージョン管理の対象にしたいフォルダを選択し、[作成] をクリック

スクリーンショット 2020-09-11 9.41.14.png

そうすると、指定したフォルダに.gitフォルダが作成される
スクリーンショット 2020-09-11 9.41.44.png

トップページに作成したリポジトリが表示される
スクリーンショット 2020-09-11 9.42.00.png

このフォルダに text.md ファイルを格納しておく

git add //記録対象の指定

フォルダーの中にファイルを格納すると、自動的に Sourtree でも検知され、[作業ツリーのファイル] に表示される
スクリーンショット_2020-09-11_9_57_45.png

ファイル名の先頭にあるチェックをオンにすると、ファイルが [indexにステージしたファイル] に追加される

git commit // 変更点の記録

スクリーンショット_2020-09-11_10_00_51.png

画面下部にコミットメッセージを入力するところが出てくるので、コミットメッセージ(ここでは「first commit」)を記載し、[コミット] をクリック

ファイルの中身を修正すると、以下のように表示されるので、コミットしたいファイルを[作業ツリーのファイル] から選択し、コミットメッセージを入力する、という手順を繰り返す
sa.png

リモートリポジトリへ変更を反映

github でリポジトリを作成

[Your profile] → [Repositories] → [New] をクリック
スクリーンショット 2020-09-10 17.05.16.png

[Create a new repository] ページが表示されるので、[Repository name] を入力する。ここでは、ローカルディレクトリとあわせて「helloSourcetree」とし、[Create Repository] をクリックする

ここでは、画面に表示された [HTTPS] をコピーする

Sourcetree でローカルディレクトリを github のリモートディレクトリに紐づける

スクリーンショット_2020-09-11_10_32_41.png
画面左上の [設定] をクリックし、[リモート] → [追加]をクリックし、github でコピーした URL(ここでは https のリンク) を貼り付けて設定する。

スクリーンショット_2020-09-11_10_33_03.png

リポジトリごとにこの設定が必要になるので、[リモートの名前] にはわかりやすいようにディレクトリと同様の名前を入力しておく。

commit した変更を github に反映

スクリーンショット 2020-09-11 10.47.54.png

[プッシュ] をクリックすると、接続先を指定するウィンドウがでてくる
スクリーンショット_2020-09-11_10_33_25.png

[プッシュ先のリポジトリ] で上記で作成した 「helloSourcetree」を選択し、[プッシュするブランチ]でプッシュしたいブランチをオンにして、[OK] をクリック

ID と PW を入力すると、githubに公開される
SSH を利用すると、プッシュする際に毎回 ID と PW をいれなくてOKなので便利

github でファイルの中身を変更した場合

github 上で Read me ファイルの作成やファイルの中身を変更した場合や他の人が編集した場合も Sourcetree 上に反映される。 pull コマンドを利用して、ローカルリポジトリを更新する。

スクリーンショット 2020-09-11 11.00.36.png
[プル] のところに❶と表示されていて、一件更新があることが確認できる。 [プル] をクリック

スクリーンショット 2020-09-11 11.00.52.png

デフォルトのまま OK をクリックすると反映される

注意点

[プル] できるとき(ローカルが最新状態でないとき)に、プルせずにプッシュしようとすると以下のエラーが発生する。
このエラーが発生した場合はプルしてからプッシュすること。
スクリーンショット_2020-09-11_21_48_18.png

github にすでにあるリポジトリをローカルで管理

github にすでにあるリポジトリ(リモートリポジトリ)をローカルで管理するためにはクローンする必要がある
スクリーンショット 2020-09-11 11.28.36.png
[新規] → [URLからクローン] をクリック

ここでは、GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~を参照し、SSH の設定を行っている

スクリーンショット_2020-09-11_11_37_31.png
[ソース URL] には github の [Code] → [Clone with SSH] をコピーして貼り付ける
HTTPS を利用したい場合は、[Use HTTPS] をクリック

スクリーンショット_2020-09-11_11_37_00.png

Sourcetree では利用しないコマンド

git status //ステータスの表示 にあたる画面

スクリーンショット_2020-09-11_11_13_08.png

commit していないファイルの一覧を確認することができる。

git log // ログの表示 にあたる画面

いつだれが更新したかを確認することができる。

スクリーンショット_2020-09-11_11_13_08.png

参考

サル先生のGit入門
マンガでわかるGit

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Windows TerminalでGitの現在のブランチ名を表示する(PowerShell編)

問題

  • 開発用のターミナルとしてWindows Terminal(PowerShell)使っているけどブランチ名が表示されない。
  • 現在のブランチをいちいち確認する手間を省きたい

解決策

dahlbyk/posh-git: A PowerShell environment for Gitを使う

環境確認

Windows Terminalを開いたら次のコマンドを実行して、現在のPowerShellのバージョンを確かめる。

$ $PSVersionTable.PSVersion

このコマンドを実行すると、下記のようにPowershellのバージョンが確認できる。
image.png

README.mdを読んでみると5.x系のバージョンであれば、このまま進めていって良さそうなので次に進む。

posh-gitのインストール

管理者として実行Windows Terminalを開きなおし、次のコマンドを実行する。

$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force

このように(↓)AllowPrereleaseが認識されなかったら、PowerShellGetのバージョンが要件以下という事。
image.png

次のコマンドを実行してNuGetをインストールし、PowerShellGetにおける更新の準備を行う。

$ Install-Module PowerShellGet -Scope CurrentUser -Force -AllowClobber

このように尋ねられるがYでOK。
image.png

NuGetをインストールできたら、PowerShellGetがインストールされているかどうかを次のコマンドで確かめる。

$ Install-Module -Name PowerShellGet -Force

あったみたい。
image.png

ならPowerShellGetの更新を。

$ Update-Module -Name PowerShellGet

今までの設定を反映してもらうために一回閉じる。
準備ができたところで改めてposh-gitをインストール。

$ PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force

posh-gitを使う

インストールしても、それをPowerShellに認識してもらったり使えるようにしてもらったりしなければ、ただそこにあるだけ。
ということで、インストールしたposh-gitを使えるようにするための設定をしていく。

まずは次のコマンドを実行し、posh-gitPowerShellに認識してもらう。

$ Import-Module posh-git

インストールが完了すると早速表示が変わった。
image.png

「これで完了かな?」と思い管理者以外のユーザーで開いてみると、posh-gitが使えていなかった。
image.png

ということで、Windows Terminalを開けば自動でposh-gitが読み込まれたり管理者以外のユーザーでも使えるようにしたりするために次のコマンドを入力していく。

$ Add-PoshGitToProfile
$ Add-PoshGitToProfile -AllHosts
$ Add-PoshGitToProfile -AllUsers -AllHosts
  • Add-PoshGitToProfile: Windows Terminalを開けば自動でposh-gitが読み込まれるようにする。
  • Add-PoshGitToProfile -AllHosts: 他のPowerShellホストでもposh-gitが使えるようにする。
  • Add-PoshGitToProfile -AllUsers -AllHosts: 全てのユーザーがposh-gitを使えるようにする。

Add-PoshGitToProfile -AllUsers -AllHostsの適用には-Forceパラメーターが必要という警告が出ることもある。
その場合は次のコマンドを実行する。

$ Add-PoshGitToProfile -AllUsers -AllHosts -Force

管理者以外のユーザーでWindows Terminalを開き、posh-gitが読み込まれているかを確かめる。

posh-gitのカスタマイズ

posh-gitではブランチ名だけでなく、表示カスタマイズなどもできる。

デフォルトはこの状態だが、
image.png

自分はこのように変更した。
image.png

次のコマンドで設定一覧を確認できる。

$ $GitPromptSettings

変更したい設定は$GitPromptSettings.項目名で変更する。
自分が実行したのは次のコマンド達。

$ $GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $false
$ $GitPromptSettings.DefaultPromptPath.ForegroundColor = 'Orange'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.Text = '`n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))'
$ $GitPromptSettings.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta

$GitPromptSettings.を省略して解説。

  • ~.DefaultPromptAbbreviateHomeDirectory = $false: 現在のディレクトリ以外のパスを~で省略しない
  • ~.DefaultPromptPath.ForegroundColor = 'Orange': 現在のパスをオレンジ色に。
  • ~.DefaultPromptBeforeSuffix.Text = '‘n': パス名とコマンド入力欄の間に改行を入れる。(`の代わりに‘を使用しています。)
  • ~.DefaultPromptBeforeSuffix.Text = '‘n$([DateTime]::now.ToString("MM-dd HH:mm:ss"))': コマンド入力欄の前に現在の時刻を表示する。(`の代わりに‘を使用しています。)
  • ~.DefaultPromptBeforeSuffix.ForegroundColor = [ConsoleColor]::Magenta: 現在の時刻をマゼンタ色で表示する。

この他にも設定できる箇所はあり、それらはposh-gitREADME.mdで解説されている。

自分に合ったposh-gitを設定して使いこなそう!!

参考資料

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git操作で頻繁に使用するコマンド【初学者向け】

筆者はRailsからプログラミングを開始して1ヶ月半ほどの初学者です。
現時点で、git操作で使用する頻度の高いコマンドをまとめます。

コミット関連

git add ファイル名orディレクトリ名
→指定したファイルorディレクトリの変更内容をステージに追加

git add .
→ワークツリー内の変更した内容全てをステージに追加

git commit -m'メッセージを挿入'
→ローカルリポジトリに変更を追加

git push origin HEAD
→変更をGithubに追加

stash関連

git stash
修正途中のファイル等を、一時的に退避させておく。
Aのファイルを修正してる途中で、Bのファイルを修正したいとなった時などに、一旦このコマンドでAを退避させておいて、Bにとりかかるといった感じ。

git stash list
これまでにstashしたファイル等を一覧で表示する。

git stash pop
退避させておいたファイル等を、ワークツリーに戻す。

git stash clear
退避しているファイル等を全部削除する。

ブランチ関連

git branch
→ブランチの一覧を表示

git checkout ブランチ名
→指定したブランチに移動

git checkout -b ブランチ名
→指定した名前のブランチを作成して移動

git branch -m 変更前のブランチ名 変更後のブランチ名
ブランチ名を変更

その他

git pull origin master
現在いるブランチに、リモートリポジトリ(Github上)のmasterブランチの内容をマージ(丸ごとコピー)する。
このあたりがあまりピンとこない場合は、Udemyで「もう怖くないGit」などを見て勉強すると良いかも。

あとは以下の記事も勉強になる。

"git pull origin master" の正体
https://qiita.com/nasutaro211/items/c590994a5d5091206c08

git log --oneline --decorate
これまでのコミット履歴を、分かりやすく1行で表示してくれる。

一人で開発する上では、上記のコマンドでおおよそ間に合っています。
Gitの勉強をする上では、以下の動画も参考になりました。

はじめてのGitとGithub
https://www.udemy.com/course/intro_git/learn/lecture/6393556#overview

Gitの理解と正しく運用できる技術は実務を行う上でmustだと思うので、疑問点が出てきたらその都度きちんと理解できるまで調べていかなければなと感じています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitリモートリポジトリ作成

Gitのリモートリポジトリを作成して、sshでアクセスする。

Vagrantfile

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Jenkins and Git and Rust
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-20.04"

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.synced_folder "./data", "/vagrant_data"

  config.vm.provider "virtualbox" do |vb|
  #  vb.gui = true
    vb.memory = "2048"
  end

  # I know Vagrantfile does not require sudo. 
  # I've added sudo to the command so that it can be executed interactively.
  config.vm.provision "shell", inline: <<-SHELL
    sudo apt update

    # Create repository directory.
    sudo mkdir /var/lib/gitrepo
    cd /var/lib/gitrepo
    sudo git init --bare --shared project.git

    # Create group for git user.
    sudo groupadd git
    sudo gpasswd -a vagrant git
    sudo chown -R :git /var/lib/gitrepo

    # git clone ssh://localhost/var/lib/gitrepo/project.git project.git

  SHELL
end

環境はvagrant upするだけでできる。
リポジトリへのアクセス権がないとアクセスできないので、グループを作って対応した。

実行結果

まずはgit clone

$ git clone ssh://localhost/var/lib/gitrepo/project.git
Cloning into 'project'...
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:PRKtsYe7kZnpTU8+G7+a9KEMhRSsiyGXK2dOXQnJBQY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
vagrant@localhost's password:
warning: You appear to have cloned an empty repository.

ローカルリポジトリを更新する。

vagrant@vagrant:~$ cd project.git
vagrant@vagrant:~/project.git$ echo test > README.md
vagrant@vagrant:~/project.git$ git add .
vagrant@vagrant:~/project.git$ git commit -m 'initial commit'
[master (root-commit) 4dc4176] initial commit
 Committer: vagrant <vagrant@vagrant.vm>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly. Run the
following command and follow the instructions in your editor to edit
your configuration file:

    git config --global --edit

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+)
 create mode 100644 README.md

git pushする。

vagrant@vagrant:~/project.git$ git push origin master
vagrant@localhost's password:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 211 bytes | 35.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://localhost/var/lib/gitrepo/project.git
 * [new branch]      master -> master
vagrant@vagrant:~/project.git$

うまくいった。Windowsホストからアクセスする場合は、22番ポートが2222番ポートにフォワードされていること、今回のユーザがvagrantであることを考慮して、以下のようにする。

> git clone ssh://vagrant@localhost:2222/var/lib/gitrepo/project.git project.git
Cloning into 'project.git'...
vagrant@localhost's password:
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

振り返り

  1. 次はJenkinsとの連携だ。

参考資料

  1. CentOSにGitサーバー(Apache)を構築
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む