You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
اگر بخش قبلی را درباره استفاده از `git svn` خواندهاید، میتوانید به راحتی از آن دستورالعملها برای
6
-
`git svn clone` یک مخزن استفاده کنید؛ سپس، استفاده از سرور سابورژن را متوقف کرده، به یک سرور گیت
7
-
جدید فشار دهید و شروع به استفاده از آن کنیدارائه داده است.
8
-
اگر میخواهید تاریخچه را داشته باشید، میتوانید این کار را به سرعت انجام دهید، همانطور که میتوانید دادهها را
9
-
از سرور سابورژن خارج کنید (که ممکن است مدتی طول بکشد).
10
-
11
-
با این حال، واردات کامل نیست؛ و از آنجا که این کار زمان زیادی میبرد، بهتر است آن را به درستی انجام دهید.
12
-
اولین مشکل اطلاعات نویسنده است.
13
-
در سابورژن، هر شخصی که کامیت میکند، یک کاربر در سیستم دارد که در اطلاعات کامیت ثبت میشود.
14
-
مثالهای بخش قبلی نشان میدهند که `schacon` در برخی مکانها، مانند خروجی `blame` و `git
15
-
svn log` وجود دارد.
16
-
اگر میخواهید این را به دادههای نویسنده بهتری در گیت نگاشت کنید، به یک نگاشت از کاربران سابورژن به نویسندگان
17
-
گیت نیاز دارید.
18
-
یک فایل به نام `users.txt` ایجاد کنید که این نگاشت را به فرمت زیر داشته باشد:
5
+
6
+
اگر بخش قبلی در مورد استفاده از `git svn` را خوانده باشید، میتوانید به راحتی از آن دستورالعملها برای `git svn clone` یک مخزن استفاده کنید؛ سپس از استفاده از سرور Subversion دست بردارید، به سرور جدید Git منتقل کنید و شروع به استفاده از آن کنید. اگر میخواهید تاریخچه را نیز حفظ کنید، میتوانید به سرعت این کار را انجام دهید، به شرطی که دادهها را از سرور Subversion استخراج کنید (که ممکن است کمی زمان ببرد).
7
+
8
+
با این حال، واردات کامل نیست؛ و چون این فرآیند طولانی خواهد بود، بهتر است آن را به درستی انجام دهید. اولین مشکل اطلاعات نویسنده است. در Subversion، هر شخصی که commit میکند، یک کاربر در سیستم دارد که در اطلاعات commit ثبت میشود. نمونههای بخش قبلی schacon را در برخی مکانها نشان میدهند، مانند خروجی blame و git svn log. اگر میخواهید این را به دادههای نویسنده بهتری در Git نگاشت کنید، به یک نگاشت از کاربران Subversion به نویسندگان Git نیاز دارید. یک فایل به نام users.txt ایجاد کنید که این نگاشت را در فرمت زیر داشته باشد:
این خروجی لاگ را به فرمت XML تولید میکند، سپس فقط خطوطی که اطلاعات نویسنده را دارند نگه میدارد، تکراریها را
35
-
حذف میکند و تگهای XML را حذف میکند.
36
-
بدیهی است که این فقط بر روی سیستمی که `grep`، `sort` و `perl` نصب شده کار
37
-
میکند.
38
-
سپس، آن خروجی را به فایل `users.txt` خود هدایت کنید تا بتوانید دادههای معادل کاربر گیت را در کنار هر
39
-
ورودی اضافه کنید.
25
+
این دستور خروجی لاگ را در فرمت XML تولید میکند، سپس فقط خطوطی که اطلاعات نویسنده را دارند نگه میدارد، تکراریها را حذف میکند و برچسبهای XML را حذف میکند. مشخصاً این تنها روی سیستمی که `grep`، `sort` و `perl` نصب شده باشد کار میکند. سپس آن خروجی را به فایل `users.txt` هدایت کنید تا بتوانید دادههای معادل نویسنده Git را در کنار هر ورودی اضافه کنید.
40
26
41
27
[NOTE]
42
28
====
43
-
اگر این کار را بر روی یک ماشین ویندوزی انجام میدهید، اینجا جایی است که با مشکل مواجه خواهید شد.
44
-
مایکروسافت برخی نکات و نمونههای خوب را در https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[].
29
+
اگر این کار را روی یک سیستم ویندوزی امتحان میکنید، این نقطهای است که ممکن است با مشکل مواجه شوید. مایکروسافت مشاورهها و نمونههای خوبی را در آدرس https://docs.microsoft.com/en-us/azure/devops/repos/git/perform-migration-from-svn-to-git[] ارائه داده است.
45
30
====
46
31
47
-
شما میتوانید این فایل را به `git svn` ارائه دهید تا به آن کمک کند دادههای نویسنده را به طور
48
-
دقیقتری نگاشت کند.
49
-
همچنین میتوانید به `git svn` بگویید که متادادهای که سابورژن معمولاً وارد میکند را شامل نشود، با
50
-
عبور از `--no-metadata` به دستور `clone` یا `init`.
51
-
متاداده شامل یک `git-svn-id` در هر پیام کامیت است که گیت در حین واردات تولید میکند.
52
-
این میتواند لاگ گیت شما را بزرگ کند و ممکن است کمی نامشخص باشد.
32
+
شما میتوانید این فایل را به دستور `git svn` ارائه دهید تا به آن کمک کند اطلاعات نویسنده را دقیقتر نگاشت کند. همچنین میتوانید به `git svn` بگویید که متادادههایی که معمولاً توسط Subversion وارد میشود را شامل نکند، با استفاده از فلگ `--no-metadata` در دستور `clone` یا `init`. متاداده شامل یک `git-svn-id` در داخل هر پیغام commit است که Git در حین واردات تولید میکند. این میتواند لاگ Git شما را بزرگ کرده و ممکن است آن را کمی غیرقابل فهم کند.
53
33
54
34
[NOTE]
55
35
====
56
-
شما باید متاداده را نگه دارید زمانی که میخواهید کامیتهای انجام شده در مخزن گیت را به مخزن اصلی
57
-
سابورژن برگردانید.
58
-
اگر نمیخواهید همگامسازی در لاگ کامیت شما باشد، میتوانید پارامتر `--no-metadata` را حذف
59
-
کنید.
36
+
شما نیاز به نگهداری متاداده زمانی دارید که بخواهید commitهای انجام شده در مخزن Git را دوباره به مخزن اصلی SVN منتقل کنید. اگر نمیخواهید همگامسازی در لاگ commit شما ظاهر شود، میتوانید از پارامتر `--no-metadata` صرفنظر کنید.
60
37
====
61
38
62
-
این دستور `import` شما را به شکل زیر میکند:
39
+
این دستور باعث میشود که دستور `import` شما به شکل زیر باشد:
@@ -83,7 +59,7 @@ Date: Sun May 3 00:12:22 2009 +0000
83
59
be05-5f7a86268029
84
60
----
85
61
86
-
آنها به این شکل به نظر میرسند:
62
+
آنها به این شکل هستند:
87
63
88
64
[source]
89
65
----
@@ -94,68 +70,55 @@ Date: Sun May 3 00:12:22 2009 +0000
94
70
fixed install - go to trunk
95
71
----
96
72
97
-
نه تنها فیلد نویسنده به مراتب بهتر به نظر میرسد، بلکه `git-svn-id` نیز دیگر وجود ندارد.
73
+
نه تنها فیلد Author خیلی بهتر به نظر میرسد، بلکه `git-svn-id` نیز دیگر وجود ندارد.
98
74
99
-
شما همچنین باید کمی تمیزکاری پس از واردات انجام دهید.
100
-
برای یک چیز، باید ارجاعات عجیبی که `git svn` تنظیم کرده است را پاک کنید.
101
-
اول، برچسبها را به گونهای منتقل کنید که برچسبهای واقعی باشند نه شاخههای دور از نوع عجیب، و سپس بقیه شاخهها
102
-
را به شاخههای محلی منتقل کنید.
75
+
همچنین باید کمی تمیزکاری پس از واردات انجام دهید. اولاً، باید ارجاعات عجیبی که `git svn` ایجاد کرده است را پاک کنید. ابتدا تگها را جابهجا خواهید کرد تا تگهای واقعی شوند نه شاخههای عجیب از راه دور، سپس باقیمانده شاخهها را جابهجا خواهید کرد تا به شاخههای محلی تبدیل شوند.
103
76
104
-
برای انتقال برچسبها به برچسبهای واقعی گیت، این دستور را اجرا کنید:
77
+
برای جابهجایی تگها به تگهای مناسب Git، دستور زیر را اجرا کنید:
105
78
106
79
[source,console]
107
80
----
108
81
$ for t in $(git for-each-ref --format='%(refname:short)' refs/remotes/tags); do git tag ${t/tags\//} $t && git branch -D -r $t; done
109
82
----
110
83
111
-
این ارجاعات را که شاخههای دور بودند و با `refs/remotes/tags/` شروع میشدند، به برچسبهای واقعی
112
-
(سبک) تبدیل میکند.
84
+
این دستور ارجاعات مربوط به شاخههای از راه دور که با `refs/remotes/tags/` شروع میشدند را گرفته و آنها را به تگهای واقعی (سبکوزن) تبدیل میکند.
113
85
114
-
سپس، بقیه ارجاعات زیر `refs/remotes` را به شاخههای محلی منتقل کنید:
86
+
سپس، باقیمانده ارجاعات زیر `refs/remotes` را به شاخههای محلی تبدیل کنید:
115
87
116
88
[source,console]
117
89
----
118
90
$ for b in $(git for-each-ref --format='%(refname:short)' refs/remotes); do git branch $b refs/remotes/$b && git branch -D -r $b; done
119
91
----
120
92
121
-
ممکن است ببینید که برخی از شاخههای اضافی وجود دارند که با `@xxx` (که xxx یک عدد است) ختم میشوند،
122
-
در حالی که در سابورژن فقط یک شاخه میبینید.
123
-
این واقعاً یک ویژگی سابورژن به نام "peg-revisions" است که چیزی است که گیت به سادگی معادل نحوی ندارد.
124
-
بنابراین، `git svn` به سادگی شماره نسخه svn را به نام شاخه اضافه میکند، درست به همان روشی که شما در
125
-
svn مینویسید تا به peg-revision آن شاخه اشاره کنید.
126
-
اگر دیگر به peg-revisions اهمیتی نمیدهید، به سادگی آنها را حذف کنید:
93
+
ممکن است با برخی شاخههای اضافی روبهرو شوید که با `@xxx` (که در آن xxx یک عدد است) پسوند خوردهاند، در حالی که در Subversion فقط یک شاخه مشاهده میکنید. این در واقع یک ویژگی از Subversion به نام `peg-revisions` است، که چیزی است که Git هیچ معادل نحوی برای آن ندارد. بنابراین، `git svn` به سادگی شماره نسخه svn را به نام شاخه اضافه میکند، به همان روشی که شما در svn برای ارجاع به peg-revision آن شاخه نوشتهاید. اگر دیگر به peg-revisions اهمیتی نمیدهید، به سادگی آنها را حذف کنید:
127
94
128
95
[source,console]
129
96
----
130
97
$ for p in $(git for-each-ref --format='%(refname:short)' | grep @); do git branch -D $p; done
131
98
----
132
99
133
-
اکنون تمام شاخههای قدیمی، شاخههای واقعی گیت هستند و تمام برچسبهای قدیمی، برچسبهای واقعی گیت هستند.
100
+
حال همه شاخههای قدیمی به شاخههای واقعی Git تبدیل شدهاند و تمام تگهای قدیمی به تگهای واقعی Git تبدیل شدهاند.
134
101
135
-
یک چیز آخر برای تمیز کردن وجود دارد.
136
-
متأسفانه، `git svn` یک شاخه اضافی به نام `trunk` ایجاد میکند که به شاخه پیشفرض سابورژن
137
-
اشاره دارد، اما ارجاع `trunk` به همان مکان `master` اشاره میکند.
138
-
از آنجا که `master` به طور ایدئولوژیک گیت است، اینجا چگونگی حذف شاخه اضافی است:
102
+
یک چیز آخر برای تمیزکاری باقیمانده است. متاسفانه، `git svn` یک شاخه اضافی به نام `trunk` ایجاد میکند که به شاخه پیشفرض Subversion اشاره دارد، اما ارجاع trunk به همان مکانی اشاره میکند که `master` است. از آنجا که `master` به طور معمول در Git استفاده میشود، اینجا نحوه حذف شاخه اضافی آورده شده است:
139
103
140
104
[source,console]
141
105
----
142
106
$ git branch -d trunk
143
107
----
144
108
145
-
آخرین کاری که باید انجام دهید این است که سرور گیت جدید خود را به عنوان یک ریموت اضافه کنید و به آن فشار دهید.
146
-
در اینجا یک مثال از افزودن سرور خود به عنوان یک ریموت است:
109
+
آخرین کاری که باید انجام دهید، اضافه کردن سرور جدید Git خود به عنوان یک remote و سپس push کردن به آن است. در اینجا یک مثال از اضافه کردن سرور خود به عنوان یک remote آورده شده است:
0 commit comments