私はRPMを作成するためのビルドプロセスを持っています。チームはrpmのリリース番号を使用してバージョン情報を追跡します。彼らは<program_name>-<version>-<rel_num>.<os_type>.<arch>.rpm
のように見えます。以下は、該当する場所:gitの状態はスクリプトのブランチを切り替えることで混乱します
- バージョンセマンティックバージョンパターンMAJORです。 MINOR。 PATCH
- rel_numは
- OS_TYPEが期待x86_64のか何を持っているとしてEnterprise Linux用の7
- アーチをEL7され、それが独特作るために、単純にリビジョンコントロールに格納されているすべての増加する整数でありますあなた
私が取り組んでいるプロジェクトは、そのソースがgitに保存されています。このRPMのリリース番号プロセスは、Subversion(私たちのチームがサポートしているほとんどのプロジェクトが存在する)から継承されています。
一意性を維持するために、rpm_build_num
という名前のファイルを含む一意のディレクトリを持つプロジェクトのために、rpm
というブランチを作成しました。このファイルはで、rpmブランチにはしか存在しません。 make
プロセス中に、rpmブランチをチェックアウトするためにBASHスクリプトが呼び出され、存在しない場合はorigin/rpm
に基づいて新しいブランチを作成します。ビルド番号を増分してからリモートに戻します。これが完了すると、スクリプトは終了する前にブランチを復元します。簡単なBASHで
storedBranch=$(git branch | awk -e '/^\*/{print $2}')
git branch | grep -q rpm
if [[ ${PIPESTATUS[1]} != 0 ]]; then
git checkout -b rpm origin/rpm
else
git checkout rpm
fi
# fetch and merge origin/rpm if needed
cd path/to/dir
echo (($(cat rpm_build_num) + 1)) > rpm_build_num
git add rpm_buid_num
git commit -m "incrementing the build number"
git push origin rpm
cd -
git checkout ${storedBranch}
の問題は、私はまだ理解していない理由のために、時々、makeプロセスのために、シェルプロンプトから起動、ということである、それは実際に使用していた枝に関して失われます。私は、このスクリプトのように、すべてのブランチに存在するディレクトリからさまざまなことを開始するために、このプロセスのあらゆる段階で非常に注意しています。しかし、私はまだ時間でこれを参照してください。makeが、コメントの行のカップルを処理している間
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
上記のエラーが4または5回を出力します。私はいくつかの試みでこれを修正して運がなかった。私のインターネット検索では、「ブランチを使って作業する」、または「ブランチを切り替える」というようなもので多くの結果が得られましたが、これは正確には関係ありません。私は別のブランチ上のファイルを更新することができないので、実際にそのブランチに変更せずにコミットしてプッシュします(私はその質問に対する答えを見つけました)。
'git checkout -b rpm origin/rpm'や' git checkout rpm'が失敗する可能性はありますか? – ElpieKay
チェックアウト後に 'sync; sync; sync'を実行しようとするか、またはファイルシステムの同期を取得するためにスリープ状態にしますか? – YOU
@ElpieKay良い質問です。実際のスクリプトは、チェックアウトを実行した後に '$?'をチェックします。スクリプトが失敗し、理由が標準出力に出力された場合、この時点でスクリプトは最終的に退くことになります。 –