באיזו מערכת Source Control / Version Control אתם משתמשים?

קלייטון.ש

Well-known member
בדיוק מה שאני אומר, וכששואלים אותי מי יבדוק

אני אומר הלקוחות יבדקו. שיעשו גם הם משהו.
 

user32

Well-known member
מנהל
מה שכן, אני עד היום לא אוהב את הSC המבוזרים

חלק מזה נובע משמרנות אבל יש גם סיבות אובייקטיביות. בפרוייקטים קטנים, כאלה עם 1-5 אנשים וגרסת לייב אחת, זה גורם למלא טרחה מיותרת והחסרונות עולים על היתרונות. החסרונות הן בעיקר עקומת לימוד גבוהה, חוסר אינטואיטיביות, והמון בעיות שמאלצות לקרוא ל"מומחה" גיט כדי לפתור ונגמר בסוף בדריסה של חתימות UID מוזרות ומשחקים של פוינטרים שלטעמי מאוד לא מתאימות לתהליך פיתוח. במערכות מסורתיות יותר כמעט ואין את הדברים האלה. עובדים מול גרסה אחת וזהו. לצערי בגלל סיבות אופנתיות אני עובד רק עם גיט ועזבתי את הנוחות של SVN. כמובן שבפרוייקטים בינוניים ומעלה, יש הרבה יתרונות למערכת מבוזרת.
 

ipv6

Member
גם בפרויקטים גדולים

בד"כ יש repo מרכזי שהגרסה שלו היא זאת שהולכת ל-production והתקשורת בין אנשים מתבצעת בעזרתו, כלומר עבדתי על משהו, אני מעלה לשרת ל-branch בשרת, אתה מוריד ממנו, מתקן ודוחף לאותו הברנץ'. כלומר בלי פניה ישירה ל-repo אחד של השני.
 

BravoMan

Active member
המערכת הראשונה שלמדתי היית SVN

אבל באותה תקופה אלה היו רק ניסיונות שעשיתי בבית. &nbsp כשבאתי ללמוד גיט, אכן לקחת לי זמן להבין למה זה שונה ומוזר, אבל ברגע שהבנתי, והתחלתי להשתמש בזה לא רק על פרויקטים ביתיים אלא גם פרויקטים בעבודה, זה דווקא נתן לי שקט נפשי. &nbsp אני רואה את זה כך: בגלל שאני מקבל עותק של ריפוזיטורי שהוא רק שלי, אני יכול לעשות משחקים חופשי. כל סוג של משחקים. &nbsp אם דפקתי משהו במבנה הריפוזיטורי, אני פשוט מוחק אותו ועושה clone מחדש. אני לא צריך לחשוש על כל פקודה שמה היא תגרום נזק לעותק ראשי שיושב בשרת, ואני אצטרך לערב את ה-IT כדי לשחזר גיבוי. &nbsp למעשה, דווקא היכולת הזו לייצר "מאגרי בלאי" בקלות היא שאפשרה לא פעם לי ולאנשים שאני מכירלהסתדר בלי מומחה גיט עם כל מיני פעולות מסובכות או לא מוכרות לנו: &nbsp עושים ניסויים על clone לפי הוראות ב-SO או מקום אחר ברשת, ואם התוצאה אינה מה שרוצים משמידים את ה-clone. &nbsp מצד שני, יצא לי גם לראות (אם כי נדיר יחסית), את הצוות שעובד עם TFVC מתחילים לצעוק בין הקיוביקלים - "הקובץ הזה נעול, מי מחזיק אותו? אני צריך לעשות תיקון דחוף!"
 

ipv6

Member
עם SVN עבדתי ב2005 בערך

לגבי "אני לא צריך לחשוש על כל פקודה שמה היא תגרום נזק לעותק ראשי שיושב בשרת, ואני אצטרך לערב את ה-IT כדי לשחזר גיבוי." SC מבוזר לא מונע ממך לעשות נזק. אתה יכול תמיד להכניס בטעות קוד למקום שממנו מתחילה שרשרת ה-deployment (הרי זה לא מהמחשב שלך) ואם האזור שדחפת לא מכוסה טוב בטסטים עשית נזק. הכח של מערכת מבוזרת זה שאתה יכול לדחוף ולמשוך ישירות לכל repo (וכל repo יכול למשוך ולדחוף אליך\ממך) ולא צריך תקשורת ל'שרת' בשביל לעבוד.
 

BravoMan

Active member
טוב, זו סכנה בסטאפים מסויימים, אולי אפילו נפוצים

אבל לי תרם יצא לעבוד במקום שבו GIT מחובר ישירות לשרשרת ה-deployment. &nbsp בתחום אפליקציות המובייל ספציפית, הוא לא כ"כ מתאים לחיבור כזה, כי בניגוד לשרתים שלך שם אתה יכול למכן מה שאתה רוצה, הגשת אפליקציות לחנויות היא תהליך ידני מייגע שאינו בשליטה שלך. &nbsp כך שאני מודה שלא חשבתי בכלל על הסכנה הזו. אני גם לא טוען ש-GIT מגן עליך מפני כל סוג של טעות, אני כן טוען שהוא נותן יותר חופש להתנסות מאשר מערכות מונוליטיות.
 

user32

Well-known member
מנהל
לא הצלחתי להבין את הטענה הזאת

במערכת לא מבוזרת, הגישה מאוד פשוטה ואינטואיטיבית: תעשה על המחשב שלך איזה שינויים שבא לך. אם התחרטת, תעשה revert, או תמחק את התיקיה או מה שאתה רוצה. שינויים שיוצאים החוצה הם כאלה שאתה משחרר לגרסה. מה הבעיה להתנסות בשיטה הזאת? הדברים שקל לעשות בSVN ומסובך לעשות בגיט הם: סינכרונים חלקיים: לסנכרן רק תיקיה מסויימת העלאות חלקיות: להעלות קובץ אחד בלי לסנכרן את כל הפרוייקט ביטולים: revert לקובץ מסויים. פשוט לדרוס אותו עם הגרסה המקורית אתה מחליט מה אתה רוצה להעלות, מה אתה רוצה לסנכרן, מה אתה רוצה לדרוס, מה לבטל וכו'. בגיט יש state של כל הפרוייקט שאתה כל הזמן צריך להיות מסונכרן איתו וזה יוצר המון תקורה. כמובן שיש לזה גם יתרונות רבים. שוב, לדעתי בפרוייקטים קטנים החסרונות עולים על היתרונות.
 

ipv6

Member
GIT מאפשר לך לעשות פעולות ברמה של קובץ

"סינכרונים חלקיים: לסנכרן רק תיקיה מסויימת" - לא יודע מה הכוונה בזה. אתה יכול לקחת תיקייה לשים כל קובץ בתיקיה הזה בגרסה שתרצה. זה לא מאד נח ידנית על פני כמות גדולה של קבצים, אבל אישיתי לא נתקלתי ב-Use case כזה. אם אתה רוצה להחזיק כמו גדולה של קבצים בגרסאות שונות, יש סיכוי לא רע שישברו לך דברים. בכל מקרה לא הזדקקתי אבל אולי כלי GUI נותנים את האופציה. "העלאות חלקיות: להעלות קובץ אחד בלי לסנכרן את כל הפרוייקט" - יכול לדחוף רק חלק מהשינויים שעשית בrepo (תוסיף לאינדקס רק דברים שאתה מתכוון לדחוף). יכול לדחוף קומיט של קובץ אחד. אין שום בעיה. " ביטולים: revert לקובץ מסויים. פשוט לדרוס אותו עם הגרסה המקורית אתה מחליט מה אתה רוצה להעלות, מה אתה רוצה לסנכרן, מה אתה רוצה לדרוס, מה לבטל וכו'. " שים כל קובץ בגרסה שאתה רוצה. דיי פשוט. git checkout dddddd
 

BravoMan

Active member
אני לא מבין בכלל מה מסובך בכל מה שרשמת

GIT לא מכריח אותך לסנכרן שום דבר, זו בדיוק הגדולה שלו. &nbsp אם אתה מנסה לעבוד עם GIT כאילו הוא מערכת מונולטית, ומה שיש לך במחשב זה ה-"working copy" אז אתה מסתבך. &nbsp ברגע שאתה מבין שמה שיש אצלך זה ריפוזיטורי נפרד, ואתה תמיד יכול לבחור בפינצטה מה נכנס אליו ומה יוצא ממנו, הכל מסתדר. &nbsp אני לא זוכר את הפקודות, אבל ברוב ה-GUI, וגם ב-Plugin שיש ב-Android Studio למשל, אתה תמיד יכול לסמן V על קבצים שאתה רוצה לדרוס, או להפך - לעשות להם קומיט. &nbsp למעשה, ברירת מחדל בקומיטים של GIT היא ששום שינוי לא מועמד להיכנס לקומיט עד שעשיתה לו במפורש ADD. יש כמובן גם אופציה להגיד לו "תיקח את כל הקבצים שהשתנו" לשם נוחות אבל זו לא ברירת מחדל! &nbsp סוג הניסויים שדיברתי עליהם זה לא שינויים בקוד שאתה בוחר עם לעשות להם commit או לא, אלא דווקא פעולות ב-GIT עצמו. &nbsp אתה רוצה לבדוק מה עושה עכשיו merge או rebase או השד יודע מה. איך אתה בודק את זה מול שרת מונוליטי בלי לסכן את השרת עצמו? &nbsp יש עוד יתרון לריפוזיטורי מקומי במקרים מסוימים, וזה כשיש בעיות בגישה לשרת הקוד מעמדות הפיתוח. למשל, בארגון שאנחנו עובדים, יש הבדלה בין רשתות בטעמי אבטחה, ויש כל מיני סיבוכים בשינוע קוד בין עמדות פיתוח לשרת ה-TFS הראשי. &nbsp אם היינו עובדים מול מערכת מונוליטית, מפתחים היו מהר מאוד מפתחים נטייה להמעיט בקומיטים, וליצור קומיטים ענקיים שמאגדים כמה משימות נפרדות רק כדי לעבוד פחות מול השרת. &nbsp ב-GIT בעיה כזו לא קיימת. &nbsp ברור לי שלא כל אחד סובל מסוג ספציפי זה של בעיות, ועדיין, זה עוד יתרון למערכת המבוזרת.
 

ipv6

Member
הבעיה עם GIT היא התיעוד שלו

הרשמי (לא כל מיני אתרים ומדריכים שמפשטים את העניין) מסובך והמנשק משתמש שלו מאד לא ברור וחד משמעי ויש הרבה דרכים להשיג אותו הדבר. כנ"ל ההודעות שגיאה. אמר לי פעם משהו שיש קונספרציה שGIT זאת דרך להביא עוד משתמשים ל-StackOverflow, לראיה אפשר לראות את המון שאלות לדברים סופר בסיסיים והמון תשובות שנראות לא פשוטות בכלל. לדעתי יבגני, עליו השלום, פעם דיבר על זה. הנקודה השניה שגורמת לאנשים לפחד מGIT זה שיש מתחת 'תורה' יחסית מסובכת עם הרבה מושגים תלויות, שרב המוחלט של המשתמשים שגם יודעים להסתדר עם git טוב יחסית, לא מבינים או יודעים במדויק את המשמעות. בסוף אנשים רואים בזה כלי שאמור לשרת אותנו ולא מוכנים להשקיע מאמץ גדול בללמוד את כל הדקויות \ להבין עד הסוף ונבהלים ממנו.
 

BravoMan

Active member
אבל האם כולם באמת צריכים את כל הדקויות האלה?

זה מזכיר לי כמה וויכוחים על Open Office מול MS Office. &nbsp למשל, לא ידעתי ש-Excel תומך ביותר מ-65 אלף שורות ו-Sheets לא, כי בחיים שלי לא הייתי צריך להתעסק עם פאקינג קובץ אקסל שראוי שיהי טבלה ב-mysql תעשייתי ולא בקובץ במחשב שולחני. &nbsp אם אתה עובד על פרויקט של מפתח יחיד, בין אם בעבודה, ובין אם בלימודים או כתחביב, מה אתה כבר צריך לדעת חוץ מ-איך לעשות קומיט, וליצור בארנצ' חדש? מקסימום push / pull. &nbsp בכנות, אני לא חושב ש-GIT כ"כ מסובך, אלא אם אתה מנסה לעשות בו שימושים מורכבים. &nbsp אני חושב שהרבה יותר קשה היה ללמוד לתכנת OO עם JS (לפני הגרסה האחרונה שקצת סדרה את זה), ולמרות זאת אף אחד לא בכה על זה... חוץ ממני - אני עדיין חושב ש-JS היא שפה סופר מגעילה
 

hadooper

New member
נוטה להסכים ואפילו גילוי נאות...

הפעם הראשונה בה התחלתי להשתמש בגיט (אי שם ב2012), היה במסגרת סדנת הדרכה של אדם שהחברה שעבדתי בה בזמנו שכרה למשך שני מפגשים. בלעדיהם אני כמעט סבור שרוב האנשים אצלנו היו מתקשים ליישר ביניהם קו לגבי צורת עבודה נכונה ומתואמת איתו... מה גם שהכלי עצמו ניתן לשימוש בצורות של מטודולוגיות עבודה שיכולות להיות מאד שונות זו מזו... יש כאלה שעובדים ב feature branches, יש וריאציות שונות של continuous integration, יש ארגונים שמשתמשים בו בתור monorepo (עבדתי פעם באחד כזה)... מרחב התמרון איתו לא כל כך קטן... אבל אני סבור שדווקא במקום הנוכחי שלי, אנחנו עובדים במטודולוגיה שמרגישה יחסית פשוטה / "רזה" ואוניברסלית.
 

bismark1

New member
ניסית את hg?

מבוזר אבל הרבה יותר פשוט מגיט. הבעיה עם ה-sc הלא מבוזרים היא שהם מייצרים מנטליות של פחד לדחוף שינויים אצל הרבה אנשים.
 
גיט מאז ולתמיד - GUI מומלץ ולמה גיט חשוב גם בצוות קטן

אז כמובן git. זה לא אומר שלא עבדתי (ועובד) במהלך השנים גם עם דברים אחרים, לפי החברה והפרויקט. עבדתי עם SVN, TFVC, Perforce וכלים פנימיים, אבל ברגע שהבנתי איך לשלב דברים, מקומית עבדתי עם גיט גם אם לשרת הייתי צריך לדחוף אחרת. &nbsp למעשה, אני עובד עם גיט גם כשאני עובד לבד ולא דוחף את הקוד לשום מקום, למשל כשאני מכין פתרון לתרגיל בלימודים. לפעמים ה-git repo פשוט יישב ב-dropbox שלי, לטובת הגיבוי, ולשם אדחף את השינויים. גיט שימושי מאוד כי הוא מאפשר לי branch-ים שונים כדי לנסות כיוונים שונים, מעקב עצמי של שינויים (תחשבו על זה כמו על undo/redo עם stack אינסופי ושנשמר גם כשאני סוגר את ה-IDE), ועוד ועוד. &nbsp לגבי ה-GUI החביב עליי - GitExtensions הוא מעולה. למרבה הצער, הוא רק ל-Windows. אני כמעט ולא עובד בלינוקס, לצערי, אז לא בדקתי מה זמין שם ברמה דומה. &nbsp החיסרון היחיד של גיט, אני מודה, זה עקומת הלימוד הלא טריוויאלית. אבל אם יש מי שיילמד שימוש נכון והרגלים נכונים (אני, למשל :) ), תוך שעתיים-שלוש של הדרכה הצוות יכול להתחיל לעבוד ולהתמודד יפה.
 

d70

Well-known member
git
git ב CLI . די התרגלתי אליו ככה שקשה לי לחשוב על מעבר למערכת אחרת.
נדרשת עקומת לימוד שבנויה על שטויות שקורות תוך כדי שימוש. כל עוד לא עושים
git reset --hard
אפשר להתאושש. פה ושם משתמש ב gitk עבור תצוגה ויזואלית זריזה.
 

ipv6

Member
אפשר לחזור מ- git reset --hard

עשה git reflog תראה את כל הגרסאות של הrepo שלך ,כולל אלו שלפני הreset שהרס משם תעשה git reset לגרסה שתרצה.
 

d70

Well-known member
אכן. ואפילו השתמשתי כמה פעמים
אבל זה גיבוי מוגבל בזמן . לאחר זמן מה הוא נדרס ככל שממשיכים לעבוד עם הגיט.
במידה ואני לא בטוח בפעולה שאני עומד לעשות אני מייצר בראנץ' ודוחף לריפו. מעין restore point והעבודה שמורה שם למקרה הצורך.
 

ipv6

Member
מה זה גיבוי לזמן מוגבל?

אם זה באמת מוגבל, כנראה בגרסאות ולא בזמן. אני לא יודע האמת כמה גרסאות אחורה הוא שומר אבל לא נתקלתי מעולם במצב שאני רוצה לעשות reset לגרסה מלפני חודש, זה לא נשמע use case נפוץ. בד"כ אתה עובד, עושה טעות (reset מיותר) ורואה את הגרסה האחרונה הטובה ממש במסך הראשונה של הreflog.
 

d70

Well-known member
זה דורש חיטוט בקונפיגורציה
בעיקרון יש הגדרה של כמה ימים ה ref log שומר אחורה.אם אני לא טועה דיפולטיבית זה 90 יום. אם עלית מיידית על הטעות אז התיקון פשוט.
 

ipv6

Member
אתה צודק

נראה שבאמת הוא שומר רק ל90 יום. בכל מקרה, ב7 שנים שעובד\עבדתי עם git לא נתקלתי במצב שבו שהייתי צריך לחזור לנקודה מלפני יותר מ90 יום..
 
למעלה