特定のファイルの全履歴をダウンロードするスクリプト

fujita-masayuki November 26, 2019

 Git のあるファイルの全履歴をダウンロード(ローカルの任意のフォルダに取得)するスクリプトの存在をご存知でしたら、その情報を教えて頂けないでしょうか。

 または、そのスクリプトを作成するためのアイデアがあれば教えてください。

何卒、宜しくお願い致します。

1 answer

0 votes
Nobuyuki Mukai
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
December 1, 2019

アトラシアン株式会社の向井です。

https://community.atlassian.com/t5/Sourcetree-questions/Bitbucket-%E3%81%BE%E3%81%9F%E3%81%AF-Sourcetree-%E3%81%A7%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%B1%A5%E6%AD%B4%E3%82%92%E5%85%A8%E3%81%A6%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/qaq-p/1231008

のご質問の文脈でご回答します。「 リポジトリ上の test.txt というファイルを、 test.txt.<ハッシュ値> というファイルとして、リポジトリの作業ディレクトリ外に保存する」というシナリオであれば、一つの例としては、以下のような手順であれば実現できるかと思います。

1. git log  コマンドを利用し、コミットの履歴を取得して ファイルをコピーするコマンド文字列に変換します。具体的にはShellコンソールにて

git log test.txt | grep 'commit ' | awk '{print "git checkout " $2 " && cp test.txt ../test.txt." $2 }'

 を実行します。

2. 上記で以下のような文字列が得られるはずですので、その文字列をコマンドとしてすべて実行します。

git checkout <ハッシュ値1> && cp test.txt ../test.txt.<ハッシュ値1>
git checkout <ハッシュ値2> && cp test.txt ../test.txt.<ハッシュ値2>
....

 

以上、あくまでアイデアとしてですが、よろしければご活用ください。

fujita-masayuki December 2, 2019

アトラシアン株式会社 向井様

ご回答誠にありがとうございます。

 添付ファイルの様に、向井様に教えて頂いたコマンドの結果を"test.bat"ファイルに出力しましたが、このファイルの内容を確認すると全て改行がなく1行で出力されていました。

 各行を改行させる方法と、作成したバッチファイルをSourceTree上で実行させる方法ご存知でしたら教えて頂けないでしょうか。

 何卒、宜しくお願い致します。

ターミナル.png

Nobuyuki Mukai
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
December 2, 2019

以下のように、awkコマンドの最後に改行コードを含める形ではいかがでしょうか?

template1.cというファイルをチェックアウトしたいようでしたら例えば以下のようなコマンドになります。

git log template1.c | grep 'commit ' | awk '{print "git checkout " $2 " template1.c && cp template1.c ../template1.c." $2 "\n"}'

 また、上記はSourceTreeというよりはGitコマンドの組み合わせのみで実現していますので、コマンドプロンプト等のコンソールでご実行ください。

fujita-masayuki December 3, 2019

アトラシアン株式会社 向井様

 "\n"だと LFLF になってしまいましたので、以下の様に "\r" にしましたら CRLF で出力され、メモ帳で「test.bat」を開くと各行改行されました。

$ git log template1.c | grep 'commit ' | awk '{print "git checkout " $2 " template1.c && cp template1.c ../template1.c." $2 "\r"}' > test.bat

 ただ、以下の通り、SourceTree のターミナル上でしたら、LF だけでも問題なくファイルをコピーすることが出来ました。

$ git log template1.c | grep 'commit ' | awk '{print "git checkout " $2 " template1.c && cp template1.c ../template1.c." $2 }' > test.sh

$ ./test.sh

 ご回答誠にありがとうございました。

Nobuyuki Mukai
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
December 4, 2019

お知らせありがとうございます。お役に立てまして何よりでございます。

他にも弊社製品に関連してご不明点がありましたらお気軽にコミュニティをご利用ください。

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events