מדריך לעבודה עם SVN – פקודות בסיסיות

פקודות בסיסיות ב-SVN למשיכת קוד, עדכון, הכנסה וגם יצירת ענף
subversion logo

במאמר הקודם למדנו על שלושה מונחים משמעותיים: ענף, כאשר הענף המרכזי נקרא ב-SVN בשם trunk. קומיט שהוא פעולת הכנסת הקוד לענף מסוים ומיזוג שהוא החזרת ענף אחד ל-trunk.

נשאלת השאלה איך אנחנו מתחילים לעבוד עם SVN ממש בפועל? במקרה של SVN אנחנו צריכים שרת מרכזי. אי אפשר לעבוד עם SVN ללא שרת (לפחות בלי ים שטיקים וטריקים). רוב העבודה עם SVN נעשית מול שרת מרכזי שמכיל את כל הגרסאות. השרת המרכזי הזה נקרא repository או בקיצור repo. התקנת השרת היא לא בסקופ של המדריך הזה. אם תעבדו מול סביבת פיתוח, מנהל הסביבה יתן לכם את הכתובת של השרת. למשל, כשעבדתי מול וורדפרס, הם סיפקו לי כתובת SVN שמולה אני צריך לעבוד. מה שתצטרכו להתקין על המחשב המקומי שלכם הוא קליינט של SVN. יש קליינט ללינוקס/מק ויש לחלונות. ההתקנה על לינוקס/מק היא קלה:

sudo apt-get install svn

אחרי זה ניתן להכנס לקונסולה ולכתוב svn –help. אם הכל תקין, תראו הסבר על SVN ומפה אפשר לעבוד על ה-SVN

הקליינט הפופולרי לחלונות נקרא SVN tortoise, ניתן להתקינו בקלות באמצעות האתר שלו. אחרי ההתקנה, אם תפתחו את ה-cmd, תוכלו לכתוב svn –help והתחיל לעבוד. יש לו גם ממשק גרפי, אבל בואו נכבד את עצמנו ונעבוד עם שורת הפקודה.

אחרי שהתקנו את הקליינט, בחלונות או בלינוקס, אפשר להתחיל:

ראשית, אנו צריכים את כתובת השרת של SVN. למשל ה-SVN של התוסף שלי בוורדפרס. יש לי גם שרת SVN לוקלי משלי: http://192.168.1.100/svn. המאגר שנעבדו מולו נקרא testrepo.

אני לוקח את המאגר שלי, וכותב בקונסולה/cmd:

svn co http://192.168.1.100/svn/testrepo/

הפקודה הזו נקראת checkout – צ'קאאוט: אני יכול לראות איך נוצרה לי תיקיה של הפרויקט. אם תעשו למשל

svn co http://plugins.svn.wordpress.org/wp-notice/trunk/

תראו שנוצרה תיקיה של הפרויקט של wp-notice. איזה כיף! אם אני אעשה שינוי בקובץ מסוים, אני יכול להקליד svn status כדי לראות איזה קבצים השתנו. אם אני רוצה לראות בדיוק את השינויים, אני צריך לכתוב svn diff ואז את שם הקובץ כדי לראות את השינויים. הנה דוגמה:

$ svn status M       index.php $ svn diff Index: index.php =================================================================== --- index.php	(revision 1) +++ index.php	(working copy) @@ -1,3 +1,6 @@  <?php   +//Printing Hello World!  print "Hello World"; + +

$ svn status
M       index.php
$ svn diff
Index: index.php
===================================================================
--- index.php	(revision 1)
+++ index.php	(working copy)
@@ -1,3 +1,6 @@
 < ?php
 
+//Printing Hello World!
 print "Hello World";
+
+

ה-diff יכול להראות קצת מוזר, אבל בגדול זה די קל - יש לנו ++ לציון תוספות ו-- לציון הורדות. כאשר ה-SVN מראה לנו את השורות הקרובות. בדוגמה שלעיל אנו רואים שהוספתי הערה של Printing Hello World ושני ירידות שורה.

אם אני מרוצה מהשינויים, אני צריך לדחוף את הפעולה ל-trunk. את זה עושים עם checkin:

svn ci

הקליינט יבקש מאיתנו לכתוב הערה, מקובל לכתוב הערה מובנת ורלוונטית (ועל כך בהמשך). אם הצ'ק אין היה מוצלח, זה מה שנראה:

$ svn ci Sending        index.php Transmitting file data . Committed revision 2.

אם יצרתי קובץ חדש שלא קיים בענף שלי, אני צריך להוסיף אותו באמצעות svn add.

אם מישהו אחר עדכן את הענף, אנחנו יכולים למשוך את העדכונים אלינו באמצעות פקודת update:

svn up

מקובל לעשות svn up לפני שאנו מבצעים checkin.

יצירת ענף אחר נעשית באמצעות svn copy

 svn copy http://localhost/svn/testrepo/trunk/  http://localhost/svn/testrepo/branches/develop/ -m'Creating Develop'

כאן אני משתמש ב-URL של המאגר שלי, כמובן שכל URL יכול להתקבל כל עוד יש לי הרשאות. למשל:

 svn copy http://plugins.svn.wordpress.org/wp-notice/trunk/  http://plugins.svn.wordpress.org/wp-notice/branches/develop/ -m'Creating Develop'

כל מה שנותר לי לעשות אחרי שאני עושה את זה, זה להכנס לתיקיה שבה עשיתי check out לפרויקט ולמשוך את השינוי באמצעות svn up. אם הכל תקין, אני אראה שיש לי גם את ה-trunk וגם את ה-develop שבשלב זה הוא העתק מושלם של ה-trunk:

.
├── branches
│   └── develop
│       └── index.php
└── trunk
    └── index.php

למדנו כאן כמה מונחים חשובים. את המונחים ענף, מיזוג והכנסת קוד אנחנו מכירים מהמאמר הקודם. עכשיו למדנו על מונחים חדשים:
repository ובקיצור repo שהוא בעצם המאגר עצמו. למאגר יש trunk שהוא הענף המרכזי וכן ענפים נוספים.
check-out – משיכת המאגר אלינו. עושים את זה באמצעות פקודת svn co. הפקודה הזו מושכת את כל המידע מה-repo אלינו.
update – עדכון המאגר או הענף הספציפי. אנו עושים את זה באמצעות פקודת svn update. הפקודה הזו מעדכנת את הקבצים הלוקליים שיש אצלנו בשינויים שנעשו במאגר המרוחק.
check in – הכנסת השינויים הלוקליים שעשינו אל ה-repo. עושים את זה באמצעות פקודה svn ci.

במאמר הבא אנו נלמד על קונפליקטים.

פוסטים נוספים שכדאי לקרוא

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

הסבר על טכניקה פשוטה וידועה מאד שאנו מפעילים על מידע לפני שאנחנו מציגים אותו ב-HTML באפליקציה או באתר.

גלילה לראש העמוד