It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

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

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

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

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

1 answer

0 votes

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

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>
....

 

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

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

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

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

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

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

ターミナル.png

以下のように、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コマンドの組み合わせのみで実現していますので、コマンドプロンプト等のコンソールでご実行ください。

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

 "\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

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

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

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

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Sourcetree

Sourcetree for Windows - CVE-2019-11582 - Remote Code Execution vulnerability

A vulnerability has been published today in regards to Sourcetree for Windows.  The goal of this article is to give you a summary of information we have gathered from Atlassian Community as a st...

4,907 views 0 12
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you