問題タブ [gitattributes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
484 参照

git - .gitattributes をチェックアウトできません

リモートから .gitattributes をチェックアウトできないという奇妙な問題に遭遇しました。.gitattributes ファイルが最近追加されたので、それを取り込んで変更を加えたいと思います。私はそうgit pullしましたが、ブランチは最新であると言われましたが、ファイルはローカルマシンに表示されません(ls -al.gitattributesは表示されませんでした)。しようとしましたがgit checkout origin .gitattributes、どのファイルにも一致しないと言われました。しかしgit rm .gitattributes、そうすると、git status.gitattributes が削除のためにステージングされていることが示されます。これを解決する方法を知っている人はいますか?

編集:

そして、これが私の .gitattributes です

0 投票する
2 に答える
330 参照

git - gitattributes: 追加の固定文字列のみが異なる、ほぼ同じ名前の 2 つのファイルを照合します

バックグラウンド

smarty テンプレートを使用する場合、ファイルのコピーを作成し、次のように文字列-USERMODを追加することで、ファイルをオーバーライドできます。

.gitattributes ファイルで両方のファイルをターゲットにする方法はありますか?

2 番目のタイプのファイルをターゲットにするのは簡単です。

文字通り、ルールは次のようになります:
「-USERMOD.original_extension で終わるファイルのコピーがある場合、コピーオリジナルの両方を無視する」

もちろん、これらのファイルはいつでも手動で追加できますが、自動化されたソリューションがいいでしょう。

gitignore(5) の man ページ (パターン マッチングの説明のために gitattributes(5) によって参照される) には、次のように書かれています。

それ以外の場合、Git はパターンを、FNM_PATHNAME フラグを指定した fnmatch(3) による消費に適したシェル グロブとして扱います。

私が知る限り、シェル グロブは必要なことを実行できません。ただし、最終的な目標は、git に USERMOD ファイルとそのオリジナルを無視してエクスポートするように指示することです。したがって、これを解決するソリューションはすべて受け入れられます。

0 投票する
1 に答える
597 参照

git - gitattributes - 拡張子のない bash スクリプト ファイルを識別する方法

git の使用に慣れてきたところです。https://github.com/Danimoth/gitattributesの例を使用して、さまざまなプロジェクト (主に bash および python スクリプト) の gitattributes ファイルをまとめました。私の問題は、ほとんどの bash スクリプトにファイル拡張子がないことです。これらを明示的に選択するために使用できるパターンはありますか (フィルターなど)? それとも、.sh 拡張子を付けて名前を変更した方が簡単でしょうか?

0 投票する
1 に答える
178 参照

ruby-on-rails - 暗号化されていないプッシュを受信した後、サーバーが暗号化された Git リポジトリに自動的にプッシュするようにする方法

私たちの会社には、Rails に基づいたソフトウェア用の SVN リポジトリがあります。

また、暗号化されたリポジトリを手動で更新しました - 暗号化されていないプル、RubyEncoder でエンコード、暗号化されたプッシュ。

私たちはほとんど Git に移行しており、プロセスを自動化したいと考えています。私はプロセスを自動化し、コミットごとにしたいと考えています。

そう

  1. サーバーは、暗号化されていない任意のブランチへのプッシュを受信します
  2. サーバー フィルターは .rb ファイルを変更し、それらを Rubyencoder を介して渡します
  3. 暗号化された .rb ファイルとその他のファイルが暗号化されたリポジトリにプッシュされ、コミット メッセージが保持されるため、コミット率は 1:1 になります。
  4. ブランチの作成と削除もミラーリングされます。

git-encrypt のようなソリューションとは異なり、コード リポジトリではなく、安全でないと解釈するのはお客様のコンピューターです。

私の最初の試みは、受信後の長いフックでした。これは遅く、分岐が正しく機能しなかったため、放棄しました。

私の 2 番目の試みは、フィルタの設定と設定です*.rb = rubyencode。RubyEncoder は /dev/stdin で入力し、/dev/stdout に出力するように設定できますが、これらは git 履歴に影響を与えずにディスク上のファイルに影響するようで、受信したプッシュごとに別のコミットが必要です。cleansmudge

clean/smudge が期待どおりに機能していれば、サーバーローカルのプルとプッシュ (git remote origin add git@git.work.com:product/work_unencrypted.gitおよびgit remote set-url origin --push git@git.work.com:product/work_encrypted.git期待されるリポジトリからのプッシュとプルの取得) は、受信後のフックによってトリガーされます。

私は十分に道に迷っており、この時点で尋ねるべき適切な質問さえ知りません。たぶん、1:1 の履歴を保持するためにコミットをステップスルーして変更する方法ですか?

0 投票する
1 に答える
938 参照

git - すべてのサブフォルダーの git 属性で行末を設定する方法

私の git リポジトリには、いくつかの Windows および Linux ファイルが含まれています。例えば、

Windows フォルダーと Linux フォルダーの両方に、多くのサブフォルダーとさまざまな種類の拡張機能 (ソース コード、テキスト ファイル、tarball、バイナリなど) が含まれています。

リポジトリをチェックアウトするときに、Windows フォルダー内のすべてのファイルが eol=crlf に設定され、Linux フォルダーが eol=lf に設定されるように、gitattribute を設定するにはどうすればよいですか?

さらに、変更をリモート リポジトリにプッシュせずに変更をテストするにはどうすればよいですか?

0 投票する
1 に答える
597 参照

git - チェックアウト中に .gitattributes を無視する

JGit はサポートしていません.gitattributes。そのトピックには5年前のバグがあります。

結果として、identマクロは JGit ($Id展開) によって使用されません。

gitおよびをサポートする通常の console でブランチをチェックアウトする.gitattributesident、マクロ展開が発生します。その後 を実行すると、マクロgit blameとの行に違いは見られません。$Id$これは予想されます。

その後jgit blame、同じレポで行うと、マクロNot Committed Yetを含む行に到達します。$Id$

Sonarqube の Git プラグインの問題を調査しているときに、これを見つけました。そこの友好的な人々はフォローアップのためにバグを開きました.

私の質問:チェックアウト中に定期的に無視するように指示するにはどうすればよいですか? git.gitattributes 余分なブラウニー ポイント: Jenkins でこれを行う必要があるため、Jenkins Git プラグインをいじってすぐに使用できることが望ましいです。

正直に言うと、肯定的な答えを期待しているわけではありません。最良のことは、JGit が協力してサポートすること.gitattributesです。しかし、ここはその暴言を吐く場所ではありません。

0 投票する
0 に答える
477 参照

git - Ansible ボールト シークレットの Git クリーン/スマッジ フィルター

ansible-vaultコマンドを使用してシークレットを含むファイルを自動的に暗号化および復号化するために、git でclean/smudge フィルターをセットアップしようとしています。

ansible-vault コマンドの特徴は、べき等ではないことです (同じデータに対して呼び出されるたびに異なるバイナリが作成されます)。

このブログページで提案されている実装から始めました。残念ながら、smudge が呼び出されるたびに ( git checkout であれ、単に git status であれ)、シークレット ファイルは git 用に変更されたように見えますが、そうでなくても正しく動作しませんでした。

そこで、git がインデックスにあるバイナリと、クリーンにフィルター処理された現在のファイルを比較するのではないかと考え、次のようにそれらのスクリプトを構築しようとしました。

ここでの違いは、プレーン テキスト (暗号化されていない) シークレット ファイルの現在のバージョンと HEAD バージョンを比較しようとし、それらが異なる場合にのみ、ansible-vault で暗号化された新しいバイナリ BLOB を出力することです。

残念ながら、この変更の後、git は秘密ファイルが常に変更されていると考え続けます。git addgit blob が計算されるようにファイルを再度 ing した後でも、git はファイルが異なると見なし、変更をコミットに入れます。git diff空の変更を返すことに注意してください。

参考までに、これは汚れです:

これは差分です: