Panduan untuk JGit

1. Perkenalan

JGit adalah implementasi pustaka Java yang ringan dan murni dari sistem kontrol versi Git - termasuk rutinitas akses repositori, protokol jaringan, dan algoritme kontrol versi inti.

JGit adalah implementasi Git dengan fitur yang relatif lengkap yang ditulis di Java dan digunakan secara luas di komunitas Java. Proyek JGit berada di bawah payung Eclipse, dan rumahnya dapat ditemukan di JGit.

Dalam tutorial ini, kami akan menjelaskan cara bekerja dengannya.

2. Memulai

Ada beberapa cara untuk menghubungkan proyek Anda dengan JGit dan mulai menulis kode. Mungkin cara termudah adalah dengan menggunakan Maven - integrasi dilakukan dengan menambahkan potongan berikut ketag di file pom.xml kami :

 org.eclipse.jgit org.eclipse.jgit 4.6.0.201612231935-r 

Silakan kunjungi repositori Maven Central untuk versi terbaru JGit. Setelah langkah ini selesai, Maven akan secara otomatis memperoleh dan menggunakan pustaka JGit yang kita perlukan.

Jika Anda lebih suka bundel OSGi, ada juga repositori p2. Silakan kunjungi Eclipse JGit untuk mendapatkan informasi yang diperlukan bagaimana mengintegrasikan perpustakaan ini.

3. Membuat Repositori

JGit memiliki dua level API dasar: pipa ledeng dan porselen . Istilah untuk ini berasal dari Git itu sendiri. JGit dibagi menjadi beberapa area yang sama:

  • porcelain APIs - front-end untuk tindakan umum tingkat pengguna (mirip dengan alat baris perintah Git)
  • plumbing API - berinteraksi langsung dengan objek repositori tingkat rendah

Titik awal untuk sebagian besar sesi JGit ada di kelas Repositori . Hal pertama yang akan kita lakukan adalah membuat instance Repositori baru .

The init perintah akan membiarkan kita membuat repositori kosong:

Git git = Git.init().setDirectory("/path/to/repo").call();

Ini akan membuat repositori dengan direktori kerja di lokasi yang diberikan ke setDirectory () .

Repositori yang ada dapat digandakan dengan perintah cloneRepository :

Git git = Git.cloneRepository() .setURI("//github.com/eclipse/jgit.git") .setDirectory("/path/to/repo") .call();

Kode di atas akan mengkloning repositori JGit ke direktori lokal bernama path / to / repo .

4. Objek Git

Semua objek diwakili oleh ID SHA-1 dalam model objek Git. Di JGit, ini diwakili oleh kelas AnyObjectId dan ObjectId .

Ada empat tipe objek dalam model objek Git:

  • blob - digunakan untuk menyimpan data file
  • pohon - direktori; itu merujuk pada pohon dan gumpalan lain
  • komit - menunjuk ke satu pohon
  • tag - menandai komit sebagai khusus; umumnya digunakan untuk menandai rilis tertentu

Untuk menyelesaikan objek dari repositori, cukup teruskan revisi yang benar seperti dalam fungsi berikut:

ObjectId head = repository.resolve("HEAD");

4.1. Ref

The Ref adalah variabel yang memegang objek identifier tunggal. Pengidentifikasi objek dapat berupa objek Git yang valid ( blob , tree , commit , tag ).

Misalnya, untuk meminta referensi ke head, Anda cukup memanggil:

Ref HEAD = repository.getRef("refs/heads/master");

4.2. RevWalk

The RevWalk berjalan grafik komit dan menghasilkan komit cocok untuk:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

The RevCommit merupakan komit dalam model objek Git. Untuk mengurai komit, gunakan contoh RevWalk :

RevWalk walk = new RevWalk(repository); RevCommit commit = walk.parseCommit(objectIdOfCommit);

4.4. RevTag

The RevTag merupakan tag dalam model objek Git. Anda dapat menggunakan contoh RevWalk untuk mengurai tag:

RevWalk walk = new RevWalk(repository); RevTag tag = walk.parseTag(objectIdOfTag);

4.5. RevTree

The RevTree merupakan pohon dalam model objek Git. Sebuah RevWalk contoh juga digunakan untuk mengurai pohon:

RevWalk walk = new RevWalk(repository); RevTree tree = walk.parseTree(objectIdOfTree);

5. API Porcelain

Meskipun JGit berisi banyak kode level rendah untuk bekerja dengan repositori Git, JGit juga berisi API level lebih tinggi yang meniru beberapa perintah porselen Git dalam paket org.eclipse.jgit.api .

5.1. AddCommand ( git-add )

The AddCommand memungkinkan Anda untuk menambahkan file ke indeks melalui:

  • addFilepattern ()

Berikut adalah contoh singkat tentang cara menambahkan satu set file ke indeks menggunakan API porselen :

Git git = new Git(db); AddCommand add = git.add(); add.addFilepattern("someDirectory").call();

5.2. CommitCommand ( git-commit )

The CommitCommand memungkinkan Anda untuk melakukan komit dan telah mengikuti pilihan yang tersedia:

  • setAuthor ()
  • setCommitter ()
  • setAll ()

Berikut adalah contoh singkat tentang bagaimana menggunakan API porselen :

Git git = new Git(db); CommitCommand commit = git.commit(); commit.setMessage("initial commit").call();

5.3. TagCommand ( git-tag )

The TagCommand mendukung berbagai pilihan penandaan:

  • setName ()
  • setMessage ()
  • setTagger ()
  • setObjectId ()
  • setForceUpdate ()
  • setSigned ()

Berikut adalah contoh cepat penandaan komit menggunakan API porselen :

Git git = new Git(db); RevCommit commit = git.commit().setMessage("initial commit").call(); RevTag tag = git.tag().setName("tag").call();

5.4. LogCommand ( git-log )

The LogCommand memungkinkan Anda untuk dengan mudah berjalan komit grafik.

  • tambahkan (AnyObjectId mulai)
  • addRange (AnyObjectId sejak, AnyObjectId hingga)

Berikut adalah contoh cepat tentang cara mendapatkan beberapa pesan log:

Git git = new Git(db); Iterable log = git.log().call();

6. Tugas Semut

JGit juga memiliki beberapa tugas Ant umum yang terdapat dalam bundel org.eclipse.jgit.ant .

Untuk menggunakan tugas-tugas itu:

Ini akan memberikan tugas git-clone, git-init dan git-checkout .

6.1. git-clone

Atribut berikut diperlukan:

  • uri : URI yang akan digandakan

Atribut berikut ini opsional:

  • dest : tujuan penggandaan (defaultnya menggunakan nama direktori yang dapat dibaca manusia berdasarkan komponen jalur terakhir URI )
  • bare : true / false / yes / no untuk menunjukkan apakah repositori kloning harus kosong atau tidak (defaultnya false )
  • branch : cabang awal untuk diperiksa saat mengkloning repositori (default ke HEAD )

6.2. git-init

Tidak ada atribut yang diperlukan untuk menjalankan tugas git-init .

Atribut berikut ini opsional:

  • dest : jalur tempat repositori git diinisialisasi (default ke $ GIT_DIR atau direktori saat ini)
  • bare : true / false / yes / no untuk menunjukkan apakah repositori harus kosong atau tidak (defaultnya false )

6.3. git-checkout

Atribut berikut diperlukan:

  • src : jalur ke repositori git
  • branch : cabang awal untuk checkout

Atribut berikut ini opsional:

  • createbranch : true / false / yes / no untuk menunjukkan apakah cabang harus dibuat jika belum ada (defaultnya adalah false )
  • force : true / false / yes / no : jika true / yes dan cabang dengan nama yang diberikan sudah ada, titik awal dari cabang yang ada akan diatur ke titik awal baru; jika salah , cabang yang ada tidak akan diubah (defaultnya ke false )

7. Kesimpulan

JGit API tingkat tinggi tidak sulit untuk dipahami. Jika Anda tahu perintah git apa yang harus digunakan, Anda dapat dengan mudah menebak class dan metode mana yang akan digunakan di JGit.

Ada kumpulan cuplikan kode JGit yang siap dijalankan yang tersedia di sini.

Jika Anda masih mengalami kesulitan atau pertanyaan, silakan tinggalkan komentar di sini atau minta bantuan komunitas JGit.