יום שישי, יוני 22, 2012

וחיו git ו svn ביחד

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

בפעם הראשונה שמנסים לעשות clone מגבלים שgit יוצא ללא שגיאה ומה שרואים היינו:

git svn clone -s https://ip/svn/project/trunk_name local_repo
rXXXXX = 231876121242148168246 (refs/remotes/git-svn)

אם ניכנס לתיקיה local_repo נראה שאין קבצים פרט לתיקיית .git, על מנת לפתור את הבעיה הזאת יש להריץ git svn fetch מתוך התיקייה שנוצרה ע"י git svn.
בחלק מהמקרים נאלצתי להריץ ידנית fetch עוד עשרות פעמים עד ש git הואיל בטובו להוריד את כל הפרוייקט, מדי פעם עדיף להריץ גם git gc (אחת ל 1000 גירסאות הספיק לי .


בעייה נוספת שניתקלתי בה היה יצאה של git תוך כדי clone ולאחר מכאן fetch או rebase:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
   Use '--' to separate paths from revisions
   log --no-color --no-decorate --first-parent --pretty=medium HEAD: command returned error: 128

הפתרון לבעיה זו הוא להשתמש ללא -s ולכוון ל svn trunk שצריך דוגמה :
git svn clone https://ip/svn/project/trunk_name/ local_repo

טוב בשעה טובה ומוצלחת הצלנו לעשות clone לפרוייקט הגדול שלנו איך ניתן לו לחיות ביחד עם svn באותה התיקיה ?  שימו לב שזה מתכון לצרות - אבל גם ללמידה.

לוקחים את תיקיית ה git שנוצרה (יש רק אחת ומושכים אותה לתיקיה הראשונה שנוצרת לכם ע"י svn ,
לדוגמה:


/opt/svn/bfs_patches$ ls -la
total 7816
drwxr-xr-x 15 boris boris    4096 Jun 21 18:49 .
drwxr-xr-x  3 boris boris    4096 Jun 21 18:21 ..
-rw-r--r--  1 boris boris     174 Jun 21 18:24 .buildpath
drwxr-xr-x  3 boris boris    4096 Jun 21 18:24 docgenerator
drwxr-xr-x  9 boris boris    4096 Jun 22 00:47 .git
drwxr-xr-x  3 boris boris    4096 Jun 21 18:51 2.6.38-bfs
-rw-r--r--  1 boris boris     517 Jun 21 18:24 .project
drwxr-xr-x  3 boris boris    4096 Jun 21 18:24 .settings
drwxr-xr-x  6 boris boris    4096 Jun 21 20:15 .svn



הוספתי את התיקייה .git לתוך תיקיות שהיו תחת svn, השלב הבא הוא לזכור שבכל פעם שאנחנו משנים קבצים ע"י svn לעשות :
  git  reset --hard && git svn rebase

שימו לב זה יעיף את כל השינוים המקומים שלכם בgit.
למה אני עושה את זה - אני עובד עם הרבה מאוד תוכנות ותסריטים שדורשות עבודה עם svn ולא יודעות להתמודד עם git. לכן כאשר אני מסיים איתן אני מריץ reset וחוזר לעבוד עם git.

אין תגובות:

הוסף רשומת תגובה