Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

<GIT>

オープン
#49 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
20/100
issue の種類
ドキュメント
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
git
領域
tooling

調査の方向性

リポジトリのファイル、テスト、エントリポイント、または具体的な変更は何も指定されていません。本文は git-linearize、githashcrash、lucky-commit に関する記事です。完了条件が指定されていないため、先にリポジトリの変更が意図されているか確認してから進めてください。

索引モデルが issue の本文から書いたものです。

説明

تاریخچه گیت بسیار خطی

یکی از کارهایی که دوست دارم در پروژه هایم انجام دهم این است که تاریخچه git را تا حد امکان خطی کنم.

معمولاً به این معنی است که تعهدات را به شاخه اصلی تغییر دهید، اما همچنین می تواند به معنای اجازه دادن به ادغام در یک جهت باشد، از شاخه های ویژگی به اصلی، نه برعکس. بستگی به پروژه داره

امروز من این را یک قدم جلوتر می‌برم و یک مفهوم جدید را معرفی می‌کنم: تاریخچه git بسیار خطی .

با تاریخچه بسیار خطی ما، اولین commit در یک هش repo یک هش است که با شروع می شود 0000000، commit دوم است 0000001، سومی است 0000002، و غیره!

اعداد نسخه افزایشی صحبت در مورد ویرایش ها را آسان می کند. بلافاصله می‌دانید که نسخه 230 بعد از 200 می‌آید، و اگر روزانه 10 نسخه جدید ایجاد کنید، به راحتی می‌توانید شهودی داشته باشید که یک commit بر اساس آخرین نسخه فعلی شما چقدر قدیمی است.

تاریخچه گیت بسیار خطی ( در GitHub )

پس زمینه

در git، commit ها با SHA‑1مجموع خود شی commit ارجاع داده می شوند. ما می‌توانیم یک شی کامیت خام را با استفاده git cat-fileاز هش بودن آن با خواندن آن از دیسک (فشرده شده با zlib) و آزمایش چک‌سام بررسی کنیم. جمع کنترلی حاصل باید همیشه با نام فایل یکسان باشد.

$ git cat-commit d9ef231178b5004c17fe4e4e1807728567a69b84 درخت 2ccda48edc8ed3a96ac7576c57a5d645de2396f6 والد ad877a8e0240bdec6757781fdc3f2b45b8ced7a2 نویسنده گوستاو وستلینگ [email protected] 1669040942 +0100 committer گوستاو وستلینگ [email protected] 1669040995 +0100 وبلاگ: شروع به کار بر روی یک پست وبلاگ برای تاریخچه git بسیار خطی کنید $ pigz -d < .git/objects/d9/ef231178b5004c17fe4e4e1807728567a69b84 | sha1sum d9ef231178b5004c17fe4e4e1807728567a69b84 -

پیام commit آخرین بار در شی است و به راحتی قابل تغییر است. برای تغییر چک جمع شی، می توانیم داده های ناخواسته را به پیام commit اضافه کنیم. ما فقط نمی دانیم محموله ناخواسته چیست.

خرد کردن اعداد

هیچ راهی برای ایجاد آسان محتوا با پیشوند مورد نظر وجود ندارد (که از کل چک‌سام‌ها جلوگیری می‌کند). بنابراین ما فقط یک گزینه داریم: آزمایش بسیاری از ترکیبات داده های ناخواسته تا زمانی که بتوانیم یکی را پیدا کنیم که معیارهای ما را برآورده کند. این اساساً همان مکانیزمی است که بیت کوین و سایر سیستم های اثبات کار را تقویت می کند. در این مورد حدس می‌زنم می‌توان آن را "اثبات کار، برای کار شما" نامید. یا «اثبات اثبات کار»؟ هه

من کرانچ کردن پیام commit را با استفاده از githashcrash توسط Mattias Appelgren انجام داده ام.

در مک بوکم می توانم 15 میلیون هش در ثانیه تولید و آزمایش کنم. از آنجایی که ما به دنبال ورودی هستیم که یک پیشوند 8 کاراکتری از پیش تعریف شده ایجاد کند، باید در هر 16^8 => 4 294 967 296تکرار، تقریباً هر 5 دقیقه یک بار، یک ضربه دریافت کنم! می‌توانید با استفاده از پیشوندهای کوتاه‌تر، این فرآیند را سریع‌تر انجام دهید، یک پیشوند 6 کاراکتری فقط 1 ثانیه طول می‌کشد تا تولید شود (اما در برخی از رابط‌های کاربری Git به خوبی به نظر نمی‌رسد، و از آنجایی که این پروژه‌ای است که فرم را بر عملکرد اولویت می‌دهد، من مایل به هدر دادن چرخه های CPU بیشتری هستند).

برای مثال commit بالا، می‌توانیم از githashcrash برای یافتن داده‌های ناخواسته استفاده کنیم که پیشوند commit را به هر چیزی که می‌خواهیم تغییر می‌دهد، مانند 00000000. پس از کمی کرانچ، githashcrash متوجه می‌شود که می‌توانیم magic: MTQIpN2AmwQAبه پیام commit خود اضافه کنیم تا هش مورد نظر خود را ایجاد کنیم! آآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآآگاه

2022/11/21 15:56:04 زمان: 12m19.962437166s 2022/11/21 15:56:04 تست شده: 1.0845869819e+10 2022/11/21 15:56:04 14.66 MH/s 2022/11/21 15:56:04 یافت شد: 00000000 508749e5231fa5b43efcf7ac31385058 $ git cat-commit 00000000 508749e5231fa5b43efcf7ac31385058 درخت 2ccda48edc8ed3a96ac7576c57a5d645de2396f6 والد ad877a8e0240bdec6757781fdc3f2b45b8ced7a2 نویسنده گوستاو وستلینگ [email protected] 1669040942 +0100 committer گوستاو وستلینگ [email protected] 1669041794 +0100 وبلاگ: شروع به کار بر روی یک پست وبلاگ برای تاریخچه git بسیار خطی کنید جادو: MTQIpN2AmwQA

اتوماسیون

با مقداری bash-glue می‌توانیم این فرآیند را خودکار کنیم و شاخه‌های شما را در یک دستور به‌شدت خطی کنیم. برای آزمایش آن (لطفاً این کار را نکنید)، با نصب brew install zegl/tap/git-linearizeو در هر مخزن آن را اجرا کنید git linearizeتا آن را "رفع" کنید!

من یک پروژه اسباب‌بازی اخیرم را برای استفاده از این فرمت پیشوندها تبدیل کرده‌ام، و صادقانه بگویم، واقعاً تمیز به نظر می‌رسد!

ضمیمه: پیشوندهای leet haxor

• پیشوند همه تعهدات با "C0DE" -git linearize --format "c0de"

• برخورد کامل (کل هش صفر است، سپس 000...1، و غیره) - ( هر commit git linearize --format "%040d"10 33 سال طول می کشد)

به روز رسانی: هش نامرئی مبتنی بر GPU خراب می شود

git-linearize اکنون از lucky-commit به عنوان باطن تولید هش استفاده می کند. از GPU شما برای تولید هش استفاده می کند و حدود 20 برابر سریعتر از پیاده سازی مبتنی بر CPU است. وای! lucky-commitهمچنین به طور هوشمندانه ای فقط از کاراکترهای فضای سفید نامرئی برای قرار دادن پیام های commit استفاده می کند.

با تشکر از kinduff on Hacker News که به من در مورد لاکی کامیت گفت.

主要言語
JavaScript
スター
142
フォーク
64
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

ionic-team/rollup-plugin-node-polyfills のほかの issue

ionic-team/rollup-plugin-node-polyfills の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。