Zum Inhalt springen
GitTree

Lektion 6 · Alltagsarbeit

Lesen Sie den Vergleich, bevor Sie eine Änderung beurteilen

Verwandeln Sie den Helden in ein ausführbares statisches Projekt und unterscheiden Sie dann zwischen funktionierenden, inszenierten und aufgezeichneten Unterschieden. Untersuchen Sie eine separate deterministische Bildvariante, ohne dem fortlaufenden Kursverlauf ein Bild-Commit hinzuzufügen.

In diesem Browser gespeicherter Fortschritt.

Beim Abspielen wird das Video von YouTube geladen (erweiterter Datenschutzmodus).

Englische Erzählung · English and Arabic Bildunterschriften

Öffnen Sie die VideoseiteAuf YouTube ansehen

Was Sie lernen werden

  • Benennen Sie beide Seiten eines Textvergleichs und interpretieren Sie Hinzufügungen/Entfernungen.
  • Erklären Sie, warum eine nicht verfolgte Datei im normalen Git-Diff fehlen kann.
  • Vergleichen Sie Bilder visuell, ohne so zu tun, als ob Git einen Bild-Patch in Textform bereitstellt.
  • Fügen Sie die kleinen lokalen Prüfungen hinzu und überprüfen Sie sie, bevor Sie die ausführbare Seite festschreiben.

Bevor Sie beginnen

Sie beginnen dort, wo Lektion 5 endete: der ursprüngliche Hauptteil mit einem Helden-Commit. HEAD/Index enthält HTML-01; Working index.html enthält HTML-01-WORKING. Es ist keine Fernbedienung vorhanden. Behalten Sie die Bearbeitung der unterstützenden Zeile in HTML-02 bei; Werfen Sie es nicht weg.

Das Video wurde mit Git 2.52.0, Knoten 22.22.0, npm 10.9.4 und GitTree 2.0 auf Ubuntu 24.04 aufgezeichnet: Die zehn Dateien wurden im eigenen Editor von GitTree gespeichert, in der App bereitgestellt und festgeschrieben, und die Terminalprüfungen wurden anhand der von der App erstellten Daten oder anhand separater Kopien für den Status vor der Bereitstellung und für das Bild durchgeführt. Die Node-Prüfungen werden an Node 22 übergeben, der Version, die das Projekt deklariert. Auf macOS oder Windows wurde nichts ausgeführt, und Ubuntu ist das einzige aufgezeichnete Linux-System. Der überprüfte Git-Boden von GitTree ist 2.39.0. Sobald Sie bei GitTree angemeldet sind, ist lokales Git im kostenlosen Plan enthalten und erfordert keine Anbieter- oder API-Anmeldeinformationen.

Konzept

Ein Diff beantwortet eine Frage zu two snapshots und nicht, ob eine Datei „gut“ ist. Gewöhnlicher Git-Diff vergleicht Index → ​​Arbeitsbaum; git diff --cached vergleicht HEAD → index; git diff HEAD vergleicht HEAD → Arbeitsbaum. Ein Plus markiert den Text auf der neuen Seite und ein Minus markiert den Text auf der alten Seite, nicht Zustimmung oder Tadel. Lesen Sie Gits Diff-Referenz für Vergleichssemantik.

Eine nicht verfolgte Datei hat keinen gewöhnlichen Indexeintrag. Ein leeres gewöhnliches Diff beweist daher nicht, dass keine neue Datei existiert. Überprüfen Sie auch den Status und neu hinzugefügte Dateiinhalte. Nach dem Staging einer neuen Datei kann deren vollständige Hinzufügung im zwischengespeicherten Vergleich überprüft werden.

Durch das Ändern von Inline/Split/Hunk, Wrapping, Bildmodus oder Anzeige von versteckten Leerzeichen werden die view geändert, nicht die Dateibytes, der Index, die Commits oder Remote-Referenzen. Staging ändert den Index. Der letzte normale Commit verschiebt local main; Keine Serverstatusänderungen.

Vollständig ausführbare Projekteingaben

Lassen Sie README-01 unverändert. Ersetzen Sie index.html durch HTML-02 und erstellen Sie alle verbleibenden Dateien unten mit UTF-8/LF und einer abschließenden neuen Zeile. Die minimale Angabe von .gitignore ist beabsichtigt: Die Build-Ausgabe darf nicht versehentlich in diesen ersten ausführbaren Commit gelangen. Eine umfassendere Ignorierungspolitik kommt später. Hierbei handelt es sich um Kursdokument-Payloads, nicht um im Web-Repository installierte Anwendungsdateien.

index.html – HTML-02

Aktenauszug · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand every change.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

style.css – CSS-01

Aktenauszug · css
:root {
  color-scheme: light;
  --page: #f7f8fa;
  --surface: #ffffff;
  --text: #17212e;
  --link: #154ab5;
  --line: #bac4d0;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  background: var(--page);
  color: var(--text);
  font: 1rem/1.6 system-ui, sans-serif;
}

a {
  color: var(--link);
}

.site-header,
main,
footer {
  width: min(68rem, 100% - 2rem);
  margin-inline: auto;
}

.site-header {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
  padding-block: 1rem;
}

.hero {
  max-width: 44rem;
  padding-block: 3rem;
}

h1 {
  font-size: clamp(2rem, 5vw, 3.5rem);
  line-height: 1.2;
}

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
  gap: 1rem;
}

.feature-card {
  padding: 1rem;
  border: 1px solid var(--line);
  border-radius: 0.5rem;
  background: var(--surface);
}

section {
  margin-block-end: 2rem;
}

button,
input {
  font: inherit;
}

button,
input {
  padding: 0.5rem 0.75rem;
}

:focus-visible {
  outline: 3px solid var(--link);
  outline-offset: 3px;
}

form {
  display: grid;
  max-width: 28rem;
  gap: 0.5rem;
}

site.js – JS-01

Aktenauszug · javascript
export function validateEmail(value) {
  return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value.trim());
}

if (typeof document !== 'undefined') {
  const form = document.querySelector('#signup-form');
  const email = document.querySelector('#demo-email');
  const result = document.querySelector('#signup-result');
  const toggle = document.querySelector('#theme-toggle');

  if (form && email && result) {
    form.addEventListener('submit', (event) => {
      event.preventDefault();
      result.textContent = validateEmail(email.value)
        ? 'Valid format. This demo sent nothing.'
        : 'Enter a complete fictional email address.';
    });
  }

  if (toggle) {
    toggle.addEventListener('click', () => {
      const enabled = document.documentElement.dataset.theme !== 'dark';
      document.documentElement.dataset.theme = enabled ? 'dark' : 'light';
      toggle.setAttribute('aria-pressed', String(enabled));
      toggle.textContent = enabled ? 'Use light mode' : 'Use dark mode';
    });
  }
}

package.json – PAKET-01

Aktenauszug · json
{
  "name": "gittree-features",
  "version": "0.1.0",
  "private": true,
  "type": "module",
  "engines": {
    "node": ">=22"
  },
  "scripts": {
    "lint": "node scripts/lint.mjs",
    "test": "node --test",
    "build": "node scripts/build.mjs",
    "start": "node scripts/serve.mjs"
  }
}

package-lock.json – LOCK-01

Aktenauszug · json
{
  "name": "gittree-features",
  "version": "0.1.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "gittree-features",
      "version": "0.1.0",
      "engines": {
        "node": ">=22"
      }
    }
  }
}

tests/site.test.mjs – TEST-01

Aktenauszug · javascript
import assert from 'node:assert/strict';
import test from 'node:test';

import { validateEmail } from '../site.js';

test('accepts the fictional team address', () => {
  assert.equal(validateEmail('maya@example.com'), true);
});

test('trims surrounding whitespace', () => {
  assert.equal(validateEmail('  leo@example.com  '), true);
});

test('rejects a missing domain', () => {
  assert.equal(validateEmail('omar@'), false);
});

test('rejects a missing local part', () => {
  assert.equal(validateEmail('@example.com'), false);
});

test('rejects spaces inside an address', () => {
  assert.equal(validateEmail('sara name@example.com'), false);
});

test('rejects input without an at sign', () => {
  assert.equal(validateEmail('priya.example.com'), false);
});

scripts/lint.mjs – LINT-01

Aktenauszug · javascript
import { readFile } from 'node:fs/promises';

const files = ['index.html', 'styles.css', 'site.js'];
const problems = [];

for (const file of files) {
  const source = await readFile(file, 'utf8');
  if (!source.endsWith('\n')) problems.push(file + ': missing final newline');
  const lines = source.split('\n');
  for (const [index, line] of lines.entries()) {
    if (/[\t ]+$/.test(line)) {
      problems.push(file + ':' + (index + 1) + ': trailing whitespace');
    }
  }
}

if (problems.length > 0) {
  process.stderr.write(problems.join('\n') + '\n');
  process.exitCode = 1;
} else {
  process.stdout.write('Source formatting checks passed.\n');
}

scripts/build.mjs – BUILD-01

Aktenauszug · javascript
import { copyFile, mkdir, readdir, stat } from 'node:fs/promises';
import path from 'node:path';

const output = path.resolve('dist');
const queue = ['index.html', 'styles.css', 'site.js', 'assets', 'vendor/snippets'];

await mkdir(output, { recursive: true });

while (queue.length > 0) {
  const source = queue.pop();
  let details;
  try {
    details = await stat(source);
  } catch (error) {
    if (error.code === 'ENOENT' && (source === 'assets' || source === 'vendor/snippets')) continue;
    throw error;
  }
  if (details.isDirectory()) {
    const entries = await readdir(source, { withFileTypes: true });
    for (const entry of entries) {
      if (entry.name !== '.git') queue.push(path.join(source, entry.name));
    }
    continue;
  }
  const target = path.join(output, source);
  await mkdir(path.dirname(target), { recursive: true });
  await copyFile(source, target);
}

process.stdout.write('Built the static site in dist/.\n');

scripts/serve.mjs – SERVE-01

Aktenauszug · javascript
import { readFile, stat } from 'node:fs/promises';
import http from 'node:http';
import path from 'node:path';

const root = path.resolve('dist');
const port = Number(process.env.PORT ?? 8080);
const types = {
  '.html': 'text/html; charset=utf-8',
  '.css': 'text/css; charset=utf-8',
  '.js': 'text/javascript; charset=utf-8',
  '.bmp': 'image/bmp',
};

await stat(path.join(root, 'index.html'));

const server = http.createServer(async (request, response) => {
  try {
    const address = new URL(request.url, 'http://localhost');
    const pathname = decodeURIComponent(address.pathname);
    const target = path.resolve(root, '.' + (pathname === '/' ? '/index.html' : pathname));
    const extension = path.extname(target);
    if (!target.startsWith(root + path.sep) || !Object.hasOwn(types, extension)) {
      response.writeHead(404).end('Not found');
      return;
    }
    const body = await readFile(target);
    response.writeHead(200, {
      'Content-Type': types[extension],
      'X-Content-Type-Options': 'nosniff',
    }).end(body);
  } catch {
    response.writeHead(404).end('Not found');
  }
});

server.listen(port, '127.0.0.1', () => {
  process.stdout.write('Demo site: http://127.0.0.1:' + port + '\n');
});

process.on('SIGINT', () => server.close());
process.on('SIGTERM', () => server.close());

.gitignore – IGNORE-BUILD

Aktenauszug · gitignore
dist/

In GitTree

  1. Verwenden Sie im Original-Repository Command Palette… (Befehl/Strg+Umschalt+P) → Show Working Changes. Klicken Sie in Unstaged Files auf index.html. Identifizieren Sie vor dem Ersetzen die beibehaltene Unterstützungslinienbearbeitung aus Lektion 5.
  2. Verwenden Sie Show Files (Befehl/Strg+Umschalt+E); Fokussieren Sie index.html im Dateibaum und drücken Sie die Eingabetaste. Ersetzen Sie den Arbeitsinhalt durch HTML-02 und dann durch Save (Befehl/Strg+S im Editor). Warten Sie, bis die Anzeige „Nicht gespeichert“ erlischt.
  3. Für jede weitere vollständige Datei oben: Palette New File… → Path from the project folder, geben Sie den genauen Root-Relativpfad ein → Create, fügen Sie den eigenen vollständigen Textkörper ein → Save. Verschachtelte Pfade erstellen ihre fehlenden Verzeichnisse. Die Ablehnung einer vorhandenen Datei bedeutet, dass diese Datei überprüft und unbekannte Arbeiten nicht überschrieben werden.
  4. Back to Graph → Palette Show Working Changes. Überprüfen Sie die nicht verfolgten Dateien sowie index.html. Verwenden Sie Stage File für genau die zehn oben genannten geänderten Pfade, nicht für die generierte dist-Ausgabe. Lassen Sie die vorhandene README-Datei unberührt.
  5. Klicken Sie auf jeden Pfad unter Staged Files. Verwenden Sie Hunk, Inline und Split wie in Diff view verfügbar. Palettenäquivalente sind Show Diff as Hunks, Show Diff Inline, Show Diff Side by Side. Next change ist F7; Previous change ist Umschalt+F7. Alt bleibt in Split auch auf Arabisch links und neu rechts.
  6. Untersuchen Sie Ignore whitespace / Palette Ignore Whitespace in Diffs und stellen Sie sie dann wieder her. Versteckte Leerzeichen sind kein fehlender Inhalt; Die teilweise Auswahl ist möglicherweise nicht verfügbar, wenn Leerzeichenänderungen ausgeblendet sind. Verwenden Sie einen Anzeigefilter nicht als Beweis für einen sauberen Index.
  7. Führen Sie die folgenden nativen Prüfungen im Originalordner aus. Geben Sie dann Zusammenfassung feat: add styling and local project checks ein, lassen Sie amend/push/empty/skip-hooks deaktiviert und wählen Sie Commit Changes to 10 Files. Befehl/Strg+Eingabe ist eine alternative Übermittlung, kein zweiter Schritt. Überprüfen Sie zwei Commits und bereinigen Sie den verfolgten Status.

Im Terminal

Am Prüfpunkt input erfasst diese schreibgeschützte Abfrage die noch nicht festgeschriebene Bearbeitung von Lektion 5:

Command · bash
git diff -- index.html

Beobachtete Gesamtleistung:

Ausgabe
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
     <section class="hero" aria-labelledby="hero-title">
       <p class="eyebrow">GitTree Learn demo project</p>
       <h1 id="hero-title">Understand every change.</h1>
-      <p id="hero-copy">A clear view of Git history.</p>
+      <p id="hero-copy">Choose one change, then check what Git saved.</p>
     </section>
   </main>
   <footer><p>Built by a fictional team for GitTree Learn.</p></footer>

Nach dem Speichern aller Nutzlasten vor dem Staging:

Command · bash
git status --short
Ausgabe
 M index.html
?? .gitignore
?? package-lock.json
?? package.json
?? scripts/
?? site.js
?? styles.css
?? tests/

Verzeichniseinträge „scripts/“ und „tests/“ haben den Status „Unverfolgt“ und sind kein Beweis dafür, dass ihre Dateitexte überprüft wurden.

Führen Sie Prüfungen durch. Es ist keine Abhängigkeitsinstallation oder kein Netzwerk erforderlich, da diese Skripte nur Node-Built-Ins verwenden:

Command · bash
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent build
git check-ignore dist/index.html

Beobachteter Flusenausstoß:

Ausgabe
Source formatting checks passed.

Beobachtete test-summary excerpt, ohne Zeitmessung pro Test:

Ausgabe
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0

Beobachtete Build- und Ignorierausgaben, jeweils ein Befehl:

Ausgabe
Built the static site in dist/.
dist/index.html

Das geschriebene npm-Startskript bindet Loopback und stellt dist bereit. Es ist von langer Dauer; Verwechseln Sie einen Serverprozess nicht mit einem bestandenen Test. Sein Live-HTTP-Verhalten erfordert noch eine Überprüfung der Aufzeichnungsumgebung; Hier wird kein Server-Take geltend gemacht.

Native Stage/Commit-Alternative, nur wenn die App diese Mutationen noch nicht durchgeführt hat:

Command · bash
git add -- .gitignore index.html styles.css site.js package.json package-lock.json tests/site.test.mjs scripts/lint.mjs scripts/build.mjs scripts/serve.mjs
git diff --cached --stat
git commit --quiet -m "feat: add styling and local project checks"
git rev-list --count HEAD
git status --short

Der stille Commit gelang stillschweigend; count gibt 2 aus und der letzte Kurzstatus ist leer. Die Statistik ist eine Überprüfungshilfe und kein Ersatz für das Lesen aller zehn Aktenkörper. dist wird ignoriert, nicht festgeschrieben; Es wurde keine Fernbedienung hinzugefügt.

Separate Bildvergleichsvariante

Bereiten Sie ein isoliertes copy of this same GitTree Features checkpoint vor, niemals ein zweites unabhängiges Beispiel oder das fortlaufende Original. Fügen Sie Assets/diff-card.png mit den Vorher-Bytes hinzu, führen Sie einen klar gekennzeichneten Nur-Fixture-Commit durch und ersetzen Sie dann die Arbeitsbytes durch Nachher. Mit diesen Markdown-Dateien werden keine Bilddateien oder endgültigen Medien geliefert.

Beide PNGs haben eine blaue linke Hälfte. Vorher hat eine weiße rechte Hälfte; danach hat unten rechts ein grünes Viertel. Genaue vollständige Bytes:

VersionAbmessungenBytesSHA-256
vor64 × 641629a09ba97c890da0d542166ba17882bea8f7bf9b9bd4f5ec068a156f6b7256773
danach64 × 641712ddabb4b9859aa53ff9c433a48cb7db0213e184b425a86fef20d8502eed8974f

before — full PNG Base64 bytes

Ausgabe
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAaUlEQVR4nO3QAQkAAAjAMEtYyr7m0xgi7PACi6yey68LAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4D/AAqNletEZdhfWAAAAAElFTkSuQmCC

after — full PNG Base64 bytes

Ausgabe
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAcklEQVR4nO3QQQ0AIBAEsTOBA9QQ1OANfaCC7INOMgZabeyTPF0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ7f14wOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfABwAT8dDllEqFx1AAAAAElFTkSuQmCC

Ein Aufnahmebetreiber kann jeweils eine Nutzlast in der isolierten Kopie dekodieren:

Command · bash
node --input-type=module -e "import {mkdirSync,writeFileSync} from 'node:fs'; mkdirSync('assets',{recursive:true}); writeFileSync('assets/diff-card.png',Buffer.from('<selected-full-base64>','base64'));"

Ersetzen Sie den Platzhalter für die Winkelhalterung durch eine vollständige Nutzlast ohne die Halterungen. Vorher dekodieren, das Fixture inszenieren/festschreiben und danach ohne Staging dekodieren. Die bereitgestellten Byte-Zählungen/Digests identifizieren jeden Zustand; Verwenden Sie niemals einen gefälschten Bild-Screenshot wieder.

In dieser Variante, native:

Command · bash
git diff --numstat -- assets/diff-card.png

Beobachtet in der binären Sonde:

Ausgabe
-	-	assets/diff-card.png

Bindestriche bedeuten, dass Git binäre Daten meldet, nicht null geänderte Pixel.

In der echten App: Show Working Changes → klicken Sie auf asset/diff-card.png in nicht bereitgestellten Dateien → Side by side → Swipe, verschieben Sie Swipe position mit den Pfeiltasten → Onion skin, ändern Sie After image opacity. Palettenäquivalente: Show Image Changes Side by Side, Show Image Changes with a Swipe, Show Image Changes as Onion Skin. Beide Seiten müssen tatsächlich entschlüsseln; „Abwesend/zu groß/kein Bild“ ist ein anderer gültiger Status und kein Grund, das Bild zu fälschen. Quelle erkennt PNG/JPEG/GIF/WebP, not BMP; Dem späteren LFS-BMP-Gerät darf diese Bildansicht nicht zugesagt werden.

Kehren Sie zum Original zurück, dem Kontrollpunkt für die nächste Lektion. Die zusätzlichen Commits/Assets der Image-Variante gehen niemals in den kanonischen Verlauf ein.

Ergebnis

Zwei Commits auf main; README plus die zehn deklarierten Eingaben verfolgt; Index-/Arbeitsdateien stimmen mit HEAD überein; Der generierte Dist kann vorhanden sein, wird jedoch ignoriert. Keine Bildbefestigung oder Fernbedienung im kanonischen Baum.

Häufige Fehler

  • Leeren Sie das normale Diff, während neue Dateien nicht verfolgt werden: Überprüfen Sie den Status und die bereitgestellten Ergänzungen.
  • --stat als Richtigkeit lesen: Überprüfen Sie den tatsächlichen Inhalt und beide Vergleichsendpunkte.
  • Das Ausblenden von Leerzeichen wird wie das Löschen von Leerzeichen behandelt: Es handelt sich nur um eine Ansicht.
  • Commit dist oder das bildseitige Fixture: Stellen Sie die genaue kanonische Liste bereit.

Wenn etwas schief geht

Ein fehlgeschlagener Lint/Test/Build ist ein echtes Signal; Behalten Sie die Ausgabe bei und korrigieren Sie nur die angegebene Demo-Eingabe. Überspringen Sie keine Prüfungen und löschen Sie keine unbekannten Ordner. Ein blockiertes/nicht unterstütztes Bild sollte ein ehrlicher Binär-/Größenhinweis bleiben, bis das tatsächliche Format/die tatsächliche Größe abgeglichen ist. Brechen Sie eine veraltete Teilauswahlanforderung ab und laden Sie das aktuelle Diff neu, anstatt einen Patch zu erzwingen.

Überprüfen Sie Ihr Verständnis

Beantworten Sie jede Frage und lesen Sie dann, warum. Mit „erforderlich“ gekennzeichnete Fragen zählen zum Abschluss der Lektion.

  1. Frage 1 von 6

    Was vergleicht gewöhnlicher Git-Diff?

    Wählen Sie eine Antwort.

  2. Frage 2 von 6

    Bei welchen Aktionen bleiben Repository-Snapshots unverändert?

    Wählen Sie jede zutreffende Antwort aus.

  3. Frage 3 von 6
    Erforderlich

    Neue site.js wurde nicht verfolgt. Das normale Diff ist dafür leer. Fehlt es?

    Wählen Sie eine Antwort.

  4. Frage 4 von 6
    Erforderlich

    Wenn Sie diese neue Datei bereitstellen, wo kann die vollständige Hinzufügung überprüft werden?

    Wählen Sie eine Antwort.

  5. Frage 5 von 6

    Bild numstat gibt zwei Striche aus. Was können Sie daraus schließen?

    Wählen Sie eine Antwort.

  6. Frage 6 von 6
    Erforderlich

    Überprüfen Sie den fertigen Prüfpunkt. Welche Fakten werden zusammen benötigt?

    Wählen Sie jede zutreffende Antwort aus.

0 von 6 korrekt

Beantworten Sie die erforderlichen Fragen richtig, um die Lektion abzuschließen.

In diesem Browser überprüft.

Üben

Überprüfen Sie beim Original die Anzahl 2, leeren Sie den Arbeits-/Cache-Diff und ignorieren Sie den Dist. Benennen Sie in der separaten Bildvariante, welcher Quadrant sich geändert hat und warum native Numstat Bindestriche meldet. Geänderte Eingabe: Wenn eine neue Datei nicht verfolgt statt bereitgestellt wird, wird vorhergesagt, dass normale Diff sie immer noch weglassen kann.

Ihre eigene Bestätigung: Die Website kann Ihren Computer nicht sehen.

Um die Lektion abzuschließen, beantworten Sie die erforderlichen Fragen richtig und bestätigen Sie die praktische Übung.

Zusammenfassung

  • Benennen Sie beide Endpunkte, bevor Sie einen Unterschied lesen.
  • Text-, Binär- und dekodierte Bildansichten liefern unterschiedliche Beweise.
  • Kontrollen und genaues Staging schützen den lauffähigen Checkpoint.

Glossarbegriffe eingeführt

Diff – فروق; hunk – كتلة; Index – الفهرس; Arbeitsbaum – مجلد العمل; binär – ثنائي; untracked – غير مُتتبَّع.

Videotranskript

Die Erzählung des Videos, Stichwort für Stichwort.

Zeigen Sie das Transkript
  1. Lesen Sie den Vergleich bevor Sie die Änderung beurteilen.
  2. Die spätere Heldenlinie ist noch vorhanden Arbeitsinhalt, kein neues Commit.
  3. Gewöhnliche und abgestufte Unterschiede Vergleichen Sie verschiedene Schnappschüsse.
  4. Fügen Sie die vollständig ausführbaren Eingaben hinzu und behalten Sie dabei bei die vorhandene Unterstützungslinienbearbeitung.
  5. Neue Dateien können im Normalfall fehlen diff, bis sie in den Index aufgenommen werden.
  6. Bereitstellen der deklarierten Eingaben, Es wurde keine Build-Ausgabe generiert.
  7. Das Layout verändert Ihr Ansicht, nicht die verglichenen Bytes.
  8. Befolgen Sie vorher den umgebenden Text Interpretation einer Hinzufügung oder Entfernung.
  9. Das Ausblenden von Leerzeichen ist nicht der Fall Löschen einer Leerzeichenänderung.
  10. Führen Sie die lokale Formatierung aus Überprüfen Sie dies, bevor Sie sich verpflichten.
  11. Alle sechs Eingabevalidierungen Tests bestehen in dieser Vorrichtung.
  12. Build-Ausgabe gehört in die ignoriertes Verzeichnis, nicht das Commit.
  13. Bestätigen Sie die Überprüfung lokal ausführbares Projekt.
  14. Überprüfen Sie zwei Commits und nein verbleibende verfolgte Differenz.
  15. Verwenden Sie für den Bildvergleich eine separate Kopie. nicht der fortlaufende Kontrollpunkt.
  16. Die beiden genauen PNG-Nutzlasten Identifizieren Sie die Bildzustände.
  17. Vergleichen Sie die genannten Seiten und ihre tatsächlichen Abmessungen.
  18. Bewegen Sie den Teiler ohne Ändern einer der beiden Dateien.
  19. Die Deckkraft verändert den Vergleich, nicht die gespeicherten Pixel.
  20. Die binäre Zusammenfassung von Git ist es nicht eine Anzahl geänderter Pixel.
  21. Eine nicht unterstützte oder übergroße Datei muss seinen ehrlichen Hinweis behalten.
  22. Behalten Sie die Bildbefestigung bei außerhalb der kanonischen Geschichte.
  23. Sagen Sie voraus, welcher Vergleich zeigt eine neu bereitgestellte Datei.
  24. Wählen Sie als Nächstes Hunks und Lines aus ohne andere Arbeiten zu verwerfen.