Tutorial Git Mu...login
Tutorial Git Mula Pantas
pengarang:php.cn  masa kemas kini:2022-04-11 13:44:34

Operasi asas Git


Tugas Git ialah mencipta dan menyimpan syot kilat projek anda dan membandingkannya dengan syot kilat seterusnya. Bab ini memperkenalkan arahan untuk mencipta dan menyerahkan syot kilat projek anda.


Dapatkan dan cipta arahan projek

git init

Gunakan git init untuk mencipta repositori Git baharu dalam direktori. Anda boleh melakukan ini pada bila-bila masa, dalam mana-mana direktori, dan ia disetempatkan sepenuhnya.

Laksanakan git init dalam direktori untuk mencipta repositori Git. Contohnya, jika kita mencipta projek php:

$ mkdir php
$ cd php/
$ git init
Initialized empty Git repository in /Users/tianqixin/www/php/.git/
# 在 /www/php/.git/ 目录初始化空 Git 仓库完毕。

Kini anda boleh melihat bahawa subdirektori .git dijana dalam projek anda. Ini ialah repositori Git anda, tempat semua data syot kilat tentang projek anda disimpan.

ls -a
.	..	.git

klon git

Gunakan klon git untuk menyalin repositori Git secara setempat supaya anda boleh melihat projek atau membuat pengubahsuaian.

Jika anda perlu bekerjasama dalam projek dengan orang lain atau ingin membuat salinan projek untuk melihat kod, anda boleh mengklonkan projek itu. Jalankan arahan:

 git clone [url]

[url] untuk item yang ingin anda salin, dan itu sahaja.

Sebagai contoh, jika kita mengklon projek pada Github:

$ git clone git@github.com:schacon/simplegit.git
Cloning into 'simplegit'...
remote: Counting objects: 13, done.
remote: Total 13 (delta 0), reused 0 (delta 0), pack-reused 13
Receiving objects: 100% (13/13), done.
Resolving deltas: 100% (2/2), done.
Checking connectivity... done.

Selepas pengklonan selesai, direktori simplegit akan dihasilkan dalam direktori semasa:

$ cd simplegit/ $ls README Rakefile lib

Operasi di atas akan menyalin semua rekod projek.

$ ls -a
.        ..       .git     README   Rakefile lib
$ cd .git
$ ls
HEAD        description info        packed-refs
branches    hooks       logs        refs
config      index       objects

Secara lalai, Git akan mencipta direktori projek tempatan anda dengan nama projek yang ditunjukkan oleh URL yang anda berikan. Ini biasanya nama projek selepas yang terakhir / dalam URL. Jika anda mahukan nama yang berbeza, anda boleh menambah nama yang anda mahu selepas arahan.


Syot Kilat Asas

Tugas Git ialah mencipta dan menyimpan syot kilat projek anda dan membandingkannya dengan syot kilat berikutnya. Bab ini memperkenalkan arahan untuk mencipta dan menyerahkan syot kilat projek anda.

git add

Arahan git add boleh menambah fail ke cache, sebagai contoh, kami menambah dua fail berikut:

$ touch README
$ touch hello.php
$ ls
README		hello.php
$ git status -s
?? README
?? hello.php
$

Arahan status git digunakan untuk melihat status semasa projek.

Seterusnya kami melaksanakan arahan git add untuk menambah fail:

$ git add README hello.php

Sekarang kami melaksanakan status git sekali lagi, dan anda boleh melihat bahawa kedua-dua fail ini telah ditambah.

$ git status -s
A  README
A  hello.php
$

Dalam projek baharu, adalah perkara biasa untuk menambah semua fail Kita boleh menggunakan perintah git add . untuk menambah semua fail projek semasa.

Kini kami mengubah suai fail README:

$ vim README
<pre>
<p>在 README 添加以下内容:<b># php Git 测试</b>,然后保存退出。</p>
<p>再执行一下 git status:</p>
$ git status -s
AM README
A  hello.php

Status "AM" bermakna fail ini telah berubah selepas kami menambahkannya pada cache. Selepas membuat perubahan, kami melaksanakan arahan git add untuk menambahkannya ke cache:

$ git add .
$ git status -s
A  README
A  hello.php

Apabila anda ingin memasukkan perubahan anda dalam petikan yang akan diserahkan, anda perlu melaksanakan git add.

status git

status git untuk melihat sama ada terdapat perubahan sejak komitmen terakhir anda.

Saya menambah parameter -s apabila menunjukkan arahan ini untuk mendapatkan output hasil ringkas. Jika parameter ini tidak ditambahkan, output terperinci akan menjadi:

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

	new file:   README
	new file:   hello.php

git diff

Laksanakan git diff untuk melihat maklumat terperinci hasil pelaksanaan status git.

Arahan git diff menunjukkan perbezaan antara perubahan yang telah ditulis pada cache dan perubahan yang telah diubah suai tetapi belum ditulis pada cache. Terdapat dua senario aplikasi utama untuk git diff.

  • Perubahan yang belum dicache: git diff

  • Lihat perubahan cache: git diff -- cached< . git diff --stat

  • Masukkan yang berikut dalam fail hello.php:

    <?php
    echo 'php中文网:www.php.cn';
    ?>
    $ git status -s
    A  README
    AM hello.php
    $ git diff
    diff --git a/hello.php b/hello.php
    index e69de29..69b5711 100644
    --- a/hello.php
    +++ b/hello.php
    @@ -0,0 +1,3 @@
    +<?php
    +echo 'php中文网:www.php.cn';
    +?>

    status git menunjukkan anda Serahkan perubahan atau perubahan yang dikemas kini ke cache, dan git diff menunjukkan perubahan ini baris demi baris.
  • Seterusnya mari kita semak kesan pelaksanaan git diff --cached:

    $ git add hello.php 
    $ git status -s
    A  README
    A  hello.php
    $ git diff --cached
    diff --git a/README b/README
    new file mode 100644
    index 0000000..8f87495
    --- /dev/null
    +++ b/README
    @@ -0,0 +1 @@
    +# php Git 测试
    diff --git a/hello.php b/hello.php
    new file mode 100644
    index 0000000..69b5711
    --- /dev/null
    +++ b/hello.php
    @@ -0,0 +1,3 @@
    +<?php
    +echo 'php中文网:www.php.cn';
    +?>
    git commit

    Gunakan arahan git add untuk menulis kandungan syot kilat ke kawasan cache , Laksanakan git commit untuk menambah kandungan kawasan cache ke gudang.
Git merekodkan nama dan alamat e-mel anda untuk setiap penyerahan yang anda buat, jadi langkah pertama ialah mengkonfigurasi nama pengguna dan alamat e-mel anda.

$ git config --global user.name 'php'
$ git config --global user.email test@php.cn

Seterusnya kami menulis ke cache dan menyerahkan semua perubahan kepada hello.php. Dalam contoh pertama ini, kami menggunakan pilihan -m untuk memberikan komen komit pada baris arahan.

$ git add hello.php
$ git status -s
A  README
A  hello.php
$ $ git commit -m '第一次版本提交'
[master (root-commit) d32cf1f] 第一次版本提交
 2 files changed, 4 insertions(+)
 create mode 100644 README
 create mode 100644 hello.php

Kini kami telah merakam syot kilat. Jika kami melaksanakan status git:

$ git status
# On branch master
nothing to commit (working directory clean)

, output di atas menunjukkan bahawa kami tidak membuat sebarang perubahan sejak penyerahan terkini, dan ia adalah "direktori kerja bersih: direktori kerja bersih".

Jika anda tidak menetapkan pilihan -m, Git akan cuba membuka editor untuk anda mengisi maklumat komit. Jika Git tidak dapat mencari maklumat yang berkaitan dalam konfigurasi anda untuknya, ia akan membuka vim secara lalai. Skrin akan kelihatan seperti ini:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

Jika anda merasakan proses caching git add commit terlalu menyusahkan, Git juga membenarkan anda melangkau langkah ini dengan pilihan -a. Format arahan adalah seperti berikut:

git commit -a

Kami mula-mula mengubah suai fail hello.php kepada kandungan berikut:

<?php
echo 'php中文网:www.php.cn';
echo 'php中文网:www.php.cn';
?>

dan kemudian laksanakan arahan berikut:

git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
 1 file changed, 1 insertion(+)

git reset HEAD

Perintah git reset HEAD digunakan untuk membatalkan kandungan cache.

Kami mula-mula menukar fail README, kandungannya adalah seperti berikut:

# php Git 测试
# php中文网

fail hello.php diubah suai kepada:

<?php
echo 'php中文网:www.php.cn';
echo 'php中文网:www.php.cn';
echo 'php中文网:www.php.cn';
?>

Kini selepas kedua-dua fail itu diubah suai, mereka diserahkan ke kawasan cache. Kini kita perlu membatalkan cache salah satu daripadanya, seperti berikut:

$ git status -s
 M README
 M hello.php
$ git add .
$ git status -s
M  README
M  hello.pp
$ git reset HEAD -- hello.php 
Unstaged changes after reset:
M	hello.php
$ git status -s
M  README
 M hello.php

Sekarang apabila anda melaksanakan git commit, hanya perubahan pada fail README akan dilakukan, tetapi tidak kepada hello.php.

$ git commit -m '修改'
[master f50cfda] 修改
 1 file changed, 1 insertion(+)
$ git status -s
 M hello.php

Anda boleh melihat pengubahsuaian pada fail hello.php dan menyerahkannya.

Pada masa ini kita boleh menggunakan arahan berikut untuk menyerahkan pengubahsuaian kepada hello.php:

$ git commit -am '修改 hello.php 文件'
[master 760f74d] 修改 hello.php 文件
 1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean

Ringkasnya, laksanakan git reset HEAD untuk membatalkan penambahan git sebelumnya, tetapi tidak mahu untuk memasukkannya ke dalam seterusnya Komit cache dalam syot kilat.

git rm

git rm akan mengalih keluar masukan daripada cache. Ini berbeza daripada git reset HEAD yang menyahcache entri. "Nyahcache" bermaksud memulihkan kawasan cache kepada keadaan sebelum kami membuat perubahan.

Secara lalai,

fail git rm

akan memadamkan fail daripada cache dan cakera keras anda (direktori kerja).

Jika anda ingin menyimpan fail dalam direktori kerja, anda boleh menggunakan git rm --cached:

Sebagai contoh, jika kami memadamkan fail hello.php:

$ git rm hello.php 
rm 'hello.php'
$ ls
README

Tanpa memadam fail dari ruang kerja:

$ git rm --cached README 
rm 'README'
$ ls
README

git mv

Semua arahan git mv lakukan adalah apa yang dilakukan oleh perintah git rm --cached , menamakan semula fail cakera, dan kemudian laksanakan git add untuk menambah fail baharu ke kawasan cache.

Kami mula-mula menambah semula README yang baru kami alih keluar:

$ git add README

dan kemudian menamakan semula:

$ git mv README  README.md
$ ls
README.md

Laman web PHP Cina