Panduan untuk JGit

1. Pengenalan

JGit adalah implementasi perpustakaan Java yang ringan dan murni dari sistem kontrol versi Git - termasuk rutin akses repositori, protokol rangkaian, dan algoritma kawalan versi inti.

JGit adalah implementasi Git yang agak lengkap yang ditulis di Jawa dan digunakan secara meluas dalam masyarakat Java. Projek JGit berada di bawah payung Eclipse, dan kediamannya boleh didapati di JGit.

Dalam tutorial ini, kami akan menerangkan cara mengatasinya.

2. Bermula

Terdapat beberapa cara untuk menghubungkan projek anda dengan JGit dan mula menulis kod. Mungkin cara termudah adalah menggunakan Maven - integrasi dicapai dengan menambahkan potongan berikut ketag dalam fail pom.xml kami :

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

Sila kunjungi repositori Maven Central untuk versi terbaru JGit. Setelah langkah ini selesai, Maven akan memperoleh dan menggunakan perpustakaan JGit secara automatik yang kita perlukan.

Sekiranya anda lebih suka kumpulan OSGi, terdapat juga repositori p2. Sila lawati Eclipse JGit untuk mendapatkan maklumat yang diperlukan bagaimana mengintegrasikan perpustakaan ini.

3. Membuat Repositori

JGit mempunyai dua tahap asas API: paip dan porselin . Istilah untuk ini berasal dari Git itu sendiri. JGit dibahagikan kepada kawasan yang sama:

  • API porselin - bahagian depan untuk tindakan peringkat pengguna biasa (serupa dengan alat baris perintah Git)
  • API paip - berinteraksi langsung dengan objek repositori peringkat rendah

Titik permulaan untuk kebanyakan sesi JGit adalah di kelas Repositori . Perkara pertama yang akan kita lakukan ialah membuat contoh Repositori baru .

The init arahan akan membiarkan kita mewujudkan repositori kosong:

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

Ini akan membuat repositori dengan direktori yang berfungsi di lokasi yang diberikan kepada setDirectory () .

Repositori yang ada boleh diklon dengan perintah cloneRepository :

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

Kod di atas akan mengkloning repositori JGit ke dalam direktori tempatan 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 .

Terdapat empat jenis objek dalam model objek Git:

  • gumpalan - digunakan untuk menyimpan data fail
  • pokok - direktori; ia merujuk pokok dan gumpalan lain
  • komit - menunjuk pada satu pokok
  • tag - menandakan komit sebagai istimewa; umumnya digunakan untuk menandakan pelepasan tertentu

Untuk menyelesaikan objek dari repositori, lulus semakan yang betul seperti pada fungsi berikut:

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

4.1. Ruj

The Ref adalah pembolehubah yang memegang pengecam objek tunggal. Pengenal objek boleh menjadi objek Git yang sah ( gumpalan , pohon , komit , tag )

Sebagai contoh, untuk meminta rujukan ke kepala, anda hanya boleh memanggil:

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

4.2. RevWalk

The RevWalk berjalan graf melakukan dan menghasilkan komit yang sepadan dalam perintah:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

The RevCommit mewakili melakukan dalam model objek Git. Untuk menguraikan komit, gunakan contoh RevWalk :

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

4.4. RevTag

The RevTag mewakili tag dalam model objek Git. Anda boleh menggunakan instance RevWalk untuk menguraikan teg:

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

4.5. RevTree

The RevTree mewakili pokok dalam model objek Git. Contoh RevWalk juga digunakan untuk mengurai pokok:

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

5. API Porselin

Walaupun JGit mengandungi banyak kod tahap rendah untuk bekerja dengan repositori Git, ia juga mengandungi API tahap lebih tinggi yang meniru beberapa perintah porselin Git dalam pakej org.eclipse.jgit.api .

5.1. TambahCommand ( git-add )

The AddCommand membolehkan anda untuk menambah fail ke indeks melalui:

  • tambahFilepattern ()

Berikut adalah contoh ringkas cara menambahkan sekumpulan fail ke indeks menggunakan API porselin :

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

5.2. CommitCommand ( git-komit )

The CommitCommand membolehkan anda untuk melakukan komit dan telah mengikuti pilihan yang ada:

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

Berikut adalah contoh ringkas bagaimana membuat komitmen menggunakan API porselin :

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

5.3. TagCommand ( git-tag )

The TagCommand menyokong pelbagai pilihan tag:

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

Berikut adalah contoh ringkas menandakan komit menggunakan API porselin :

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 membolehkan anda untuk dengan mudah berjalan kaki yang melakukan graf.

  • tambah (Permulaan AnyObjectId)
  • addRange (AnyObjectId sejak, AnyObjectId sehingga)

Berikut adalah contoh ringkas bagaimana mendapatkan beberapa mesej log:

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

6. Tugas Semut

JGit juga mempunyai beberapa tugas Semut yang biasa terdapat dalam kumpulan org.eclipse.jgit.ant .

Untuk menggunakan tugas-tugas tersebut:

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

6.1. git-klon

Atribut berikut diperlukan:

  • uri : URI untuk diklon dari

Atribut berikut adalah pilihan:

  • dest : destinasi untuk diklon (default menggunakan nama direktori yang boleh dibaca manusia berdasarkan komponen jalan terakhir URI )
  • telanjang : benar / salah / ya / tidak untuk menunjukkan sama ada repositori yang diklon harus kosong atau tidak (lalai ke palsu )
  • cabang : cabang awal untuk memeriksa ketika mengklon repositori (lalai ke HEAD )

6.2. git-init

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

Atribut berikut adalah pilihan:

  • dest : jalan di mana git repositori dimulakan (lalai ke $ GIT_DIR atau direktori semasa)
  • telanjang : benar / salah / ya / tidak untuk menunjukkan sama ada tempat penyimpanan mesti kosong atau tidak (lalai ke palsu )

6.3. git-checkout

Atribut berikut diperlukan:

  • src : jalan menuju git repositori
  • cabang : cabang awal untuk pembayaran

Atribut berikut adalah pilihan:

  • createbranch : benar / salah / ya / tidak untuk menunjukkan sama ada cawangan itu harus dibuat jika belum ada (lalai ke palsu )
  • force : true / false / yes / no : if true / yes dan cabang dengan nama yang diberikan sudah ada, titik permulaan cawangan yang ada akan ditetapkan ke titik permulaan yang baru; jika salah , cawangan yang ada tidak akan diubah (lalai ke palsu )

7. Kesimpulannya

API JGit peringkat tinggi tidak sukar difahami. Sekiranya anda tahu arahan git apa yang akan digunakan, anda boleh meneka kelas dan kaedah mana yang akan digunakan di JGit dengan mudah.

Terdapat koleksi coretan kod JGit yang siap dijalankan di sini.

Sekiranya anda masih menghadapi kesulitan atau pertanyaan, tinggalkan komen di sini atau minta bantuan komuniti JGit.