用git編寫自己的故事

大家好🙂在繼續訂購列表之前,我想感謝所有發送補丁的用戶和每個用戶,以慶祝git 2.16的發布,我們在更新和更正之間總共有4000行,它對我的第一個版本的評價不高,但確實表示您的好意🙂謝謝! 現在,我將告訴您一個小秘密,直到現在為止,我還沒有坐下來寫一篇文章並對此進行了很多思考,通常我只是連續寫一遍,然後好蜥蜴就喜歡上了糾正我的打字錯誤🙂所以也感謝他。

當我們談論撰寫文章時,這不是最好的方法,據說它應該有一個目標,並組織一個結構,並標記一些要點和評論等。現在,這不僅適用於一般博客,而且對於假裝好的軟件🙂為此任務,幾年前在內核開發中使用的版本控制軟件出現了一些問題之後,它誕生了 git 🙂

在哪裡學習 git?

關於git的文檔數量是驚人的,即使我們只是閱讀了安裝隨附的手冊頁,我們也會有大量的閱讀資料。 我個人發現 git書 設計得很好,即使我翻譯了第7節的某些部分,我仍然有一些,但是給我些時間😛也許在這個月我可以翻譯該節剩下的內容。

git是做什麼的?

Git旨在快速,高效,簡單並支持大量信息,畢竟,內核社區是為其軟件創建的,它是世界上最大的免費軟件聯合作品之一,擁有數百個超過一百萬行的代碼庫中每小時的貢獻數。

git的有趣之處在於它維護數據版本的方式。 過去(其他版本控製程序)在歷史上某個時刻對所有現有文件進行了壓縮,例如製作一個 備用。 當執行以下操作時,Git採用不同的方法 commit 標記了歷史上的某個點,該歷史上的點進行了一系列修改和工作,最終,所有修改都將隨時間推移放在一起,並獲得文件以能夠壓縮或標記為里程碑版本。 既然我知道所有這些聽起來都很複雜,那麼我將以一個超級基本的例子帶領您進行一次神奇的旅程。

小計算工程

計算將是一個程序,該程序將找到給定數字的平方,我們將用C語言完成它,並且將盡可能簡單,因此不要指望我進行大量安全檢查。 首先,我們要創建一個存儲庫,我將用Github來完成它,用一塊石頭殺死兩隻鳥:

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

我們添加了一些相當簡單的內容,例如許可證(如果您想保護自己的作品,這很重要,就我而言,如果他們想將其用作基礎,則強迫他們共享結果:P)

現在我們去親愛的碼頭, git clone 是負責下載位於 url 在我們的計算機上分配並創建本地副本。

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在讓我們檢查一下 git log 在我們的項目歷史中發生了什麼:

這裡我們有很多不同顏色的信息information讓我們嘗試解釋一下:

第一個黃線是“提交條形碼”,每個提交都有自己的唯一標識符,您可以使用它執行很多操作,但是我們將其保存以備後用。 現在我們有 HEAD 的celeste和 master 綠色。 這些是“指針”,它們的功能是指向我們歷史的當前位置(HEAD)以及我們正在計算機上處理的分支(master).

origin/master 是互聯網的對應物, origin 是已分配給我們的默認名稱 URL,而 master 是您在其中工作的分支機構...為了簡單起見,那些擁有 / 是那些不在我們團隊中,但指的是互聯網上的內容。

然後,我們得到了作者,日期和時間以及提交摘要。 這是對當時歷史發生情況的簡短回顧,這在許多項目中非常重要,並且有很多信息受到譴責。 讓我們仔細看看命令中提交時發生了什麼 git show <código-de-commit>

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

git show命令以補丁格式將我們帶到該屏幕,您可以在歷史記錄中看到當時已添加的內容和已刪除的內容(如果已刪除內容),到目前為止,它僅向我們顯示記錄 .gitignore,README.mdLICENSE.

現在開始做生意,讓我們寫一個文件🙂我們將創建我們歷史上的第一個里程碑😀:

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

簡而言之,我們將創建一個程序,向我們顯示執行該程序時傳遞的參數數量。

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

這很容易-現在讓我們看一下以下有用的命令: git status

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

某種善良的靈魂已經翻譯了git以使其易於遵循,在這裡我們有很多有用的信息,我們知道我們在master分支中,並且我們用 origin/master(Github分支),我們有未跟踪的文件! 為了添加它們,我們必須使用 git add,讓我們嘗試🙂

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在,我們有了一個新的綠色空間,其中顯示了已添加到工作區的文件。 在這個地方,我們可以將更改分組以進行提交,該提交是整個項目歷史中的一個里程碑,我們將創建提交🙂 git commit

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

簡短地解釋一下,黃線是我們提交的標題,我寫main.c只是一個視覺參考。 黑色文本說明了自上一次提交以來到現在所做的更改🙂我們保存了文件,並將看到我們的提交已保存在註冊表中。

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在,我們將通過以下方式查看我們項目的歷史 git log

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

再次在日誌中,現在我們可以看到綠線和紅線有所不同,這是因為在我們的計算機中,我們的承諾高於Internet上存儲的承諾🙂我們將繼續工作,假設現在我要在用戶在程序中輸入多個參數的情況下顯示一條消息(這會使計算器感到困惑🙂)

如我們所見,我們的程序已經發展了很多😀,現在我們有了 imprimir_ayuda() 在塊中顯示有關如何使用計算的消息 main() 現在我們對 if(我們將在另一時間在編程教程中看到的內容,現在只需要知道如果在計算中輸入了兩個以上的參數,程序就會結束並顯示幫助。讓我們執行它:

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

如您現在所見,它打印出已傳遞的數字而不是參數的數目,但是我在before之前沒有告訴過您 echo $? 顯示最後執行的程序的退出代碼,即 1 因為它以錯誤結束。 現在,讓我們回顧一下我們的故事如何發展:

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在我們知道我們比Github提前1次提交,即文件 main.c 已被修改,讓我們通過執行以下操作來創建下一個提交 git add main.c  進而 git commit🙂

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在,我們已經更加具體了,因為我們已經實現了一個功能並更改了驗證代碼。 現在已經保存了,我們將回顧我們的最後更改。 我們可以看到它 git show HEAD

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在您可以看到紅線和綠線,我們已經添加了庫 stdlib.h,修改了許多代碼並將功能添加到我們的故事中。

現在我們將看到日誌:git log)

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

我們可以看到,我們比Github版本提前了兩次提交,因此我們將使用的標記對等一下 git push origin master

我們這樣說,將我的提交發送到url origin 在樹枝上 master

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

恭喜你! 現在您的更改在Github上了,您不相信我嗎? 讓我們回顧一下😉

擁有。 克里斯托弗·迪亞茲·里維羅斯(Christopher Diaz Riveros)

現在我們在Github上有3個提交

總結

我們已經涉及到最基本的方面 git,現在他們可以在他們的項目中創建一個簡單的工作流,這幾乎不是git可以完成的所有工作的全部,但是對於開發人員或博客作者來說,這無疑是最實際和日常的工作。 尚未到計算器的末尾,但我們將再等一遍😉非常感謝您來到這裡,我希望它可以幫助您參與多個項目😀問候


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。

  1.   巴勃羅 他說:

    好...我不知道你是否可以,但我看不到此報告中的圖片...

    問候

  2.   巴勃羅 他說:

    我的瀏覽器有問題。 抱歉給你帶來不便。

  3.   Tecprog世界 他說:

    我仍然需要更詳細地閱讀它,我是新手。

  4.   吉列爾莫 他說:

    很棒的文章以git開頭,儘管我建議記筆記以了解細節。
    有幾件事我不清楚:
    有什麼選擇 添加.gitignore C雖然我想我會在練習時看到它,
    為什麼在下一次git提交之前必須再次執行git add main.c,add main.c是否告訴git將該文件與網絡版本進行比較? 它不會自動比較所有添加的文件以進行跟踪嗎?

    1.    克里斯·阿德 他說:

      您好Guillermo🙂很好,您發現它很有用,可以回答您的問題:

      .gitignore是一個告訴git忽略哪些格式或模式的文件,在這種情況下,選擇C會導致.o文件和編譯時生成的其他文件被忽略,這很好,因為否則您的git會在此時瘋狂每次編譯和後續操作🙂您都可以通過cat或文本編輯器檢查git在其C模板中忽略的多種格式。

      儘管git會跟踪添加到工作樹中的每個文件,但是有必要專門選擇哪些文件將進入下一個提交,舉一個例子,讓我們假設您的工作已導致您修改了5個不同的文件,能夠看到結果。 如果您想更具體一點,並解釋每個步驟的完成方式,可以執行git add file1;。 git commit; git add file2; git commit….3,4,5; git提交。 這樣,您的故事就乾淨了,變化也得到了明確的定義。 而且,如果您必須更改某些內容或還原(更高級的主題),則可以還原特定內容或添加特定內容,而無需更改其餘內容。

      希望對您有幫助,謝謝,並感謝您的提問

    2.    克里斯·阿德 他說:

      PS:git add並不表示要與網絡上的版本進行比較,但是與您工作中的上一個提交相比,如果它是本地的(綠色),它將與該版本進行比較,如果它是遠程的(紅色) ),它將與其他比較。 只是為了澄清😉

      1.    吉列爾莫 他說:

        完美,當然可以澄清。