4

gitリポジトリを取得し、特定のコミットに戻って、それらのファイルをどこかにアップロードするビルドシステムがあります。その後、マスターに戻ります。

正しいGitコマンドを使用しているかどうかはわかりません。これは、Gitがgit checkout SHA:を実行するたびにこのメッセージを表示するためです。

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

私がしたいのは、作業ディレクトリを特定のコミットにリセットし、それらのファイルをアップロードして、HEAD/masterに戻ることだけです。特定のコミットSHA(XMLをJSONなどに変換)に移動するときにファイルにいくつかの変更を加える可能性がありますが、マスターに戻るときにそれらの変更をすべて失いたいだけです。今これは私のコードです

git checkout SHA

# do a bunch of conversion and uploading

git checkout master

それは私がやりたいことをするための好ましい方法ですか?ファイルの競合を発生させることなく、常にオリジンからプルを実行できますか(チェックアウトの間に実行していることを保持したくない)?

これが原因かどうかはわかりませんが、「あなたのマスターとオリジン/マスターが分岐している」のを時々見ているので、私は尋ねています。

前もって感謝します。

4

5 に答える 5

3

これを行うのは完全にOKです。HEADがブランチ名に対応していない場合、分離されたHEADとして表示されます。それは何も悪いことではありません。

于 2012-08-20T19:12:39.560 に答える
2

git show SHA1:relative/pathまた、特定の時点でファイルのスナップショットを作成するために使用することもできます。

于 2012-08-20T19:47:39.603 に答える
0

原点から変更を引くとおっしゃいました。あなたの場合git reset --hard SHA1、特定のコミットに戻ってから、git pullから欠落している変更に戻るために使用することもできますorigin/master

于 2012-08-20T19:15:33.357 に答える
0

あなたが説明することについて、あなたはただ次のようなことをすることができます:

git archive -o /some/where/archive.tar.gz --prefix = <something><commit><ファイルリスト>

厄介な詳細については、gitアーカイブのマニュアルを参照してください。zipファイル、tarファイル(圧縮されているかどうかに関係なく)を作成し、パックされたファイルの「上」にプレフィックスを付けることができます。これらはすべて、参照されているコミットから取得されます。

于 2013-01-17T03:09:44.553 に答える
0

これは、Bambooのビルドが成功した後、API、テスト、およびコードカバレッジレポートをgithubページ(gh-pagesブランチ)にバックアップするために使用するものです。それはあなたが説明するようなことをするAntターゲットです。(ここにはたくさんの良い答えがありますが、それが役立つ場合に備えて投稿してください)。

<target name="--publish.site">
    <echo file="${temp.dir}/publish-site.sh">
        #!/bin/sh
        cd ${basedir}
        cp -fr ${basedir}/schema ${reports.dir}
        git remote set-url origin git@github.com:jasperblues/my-project.git
        git fetch origin gh-pages:gh-pages
        git checkout gh-pages
        git pull
        rm -fr ./coverage
        cp -fr ${reports.dir}/coverage/ ./coverage
        git add ./coverage
        rm -fr ./api
        cp -fr ${reports.dir}/api ./api
        git add api
        cp -fr ${reports.dir}/schema ./schema
        git add schema
        git commit -a -m "publish reports to gh-pages"
        git push -u origin gh-pages
        git checkout master
    </echo>
    <chmod perm="+x" file="${temp.dir}/publish-site.sh"/>
    <exec executable="${temp.dir}/publish-site.sh" failonerror="true" failifexecutionfails="true">
        <env key="PATH" value="${tools.paths}"/>
    </exec>
</target>
于 2013-01-17T03:18:34.370 に答える