fix typo and add translation in vi

This commit is contained in:
shengkai 2023-04-30 16:58:03 +07:00
parent 4553ff362c
commit bda08de5f8
38 changed files with 306 additions and 277 deletions

View file

@ -281,7 +281,7 @@ exports.dialog = {
' * Định nghĩa cây mục tiêu với ```define goal```. Định nghĩa mục tiêu đồng thời cũng xác định đáp án', ' * Định nghĩa cây mục tiêu với ```define goal```. Định nghĩa mục tiêu đồng thời cũng xác định đáp án',
' * Có thể định nghĩa gợi ý với ```define hint```', ' * Có thể định nghĩa gợi ý với ```define hint```',
' * Chỉnh sửa tên với ```define name```', ' * Chỉnh sửa tên với ```define name```',
' * Có thể định nghĩa hội thoại bắt đầu với ```edit dialog```', ' * Có thể định nghĩa hộp thoại bắt đầu với ```edit dialog```',
' * Nhập lệnh ```finish``` xuất cấp độ của bạn dưới dạng JSON!' ' * Nhập lệnh ```finish``` xuất cấp độ của bạn dưới dạng JSON!'
] ]
} }

View file

@ -684,17 +684,23 @@ exports.dialog = {
'', '',
'Bạn có hứng thú học Git? Bạn đến đúng nơi rồi đấy! ', 'Bạn có hứng thú học Git? Bạn đến đúng nơi rồi đấy! ',
'"Học Nhánh Git" là cách trực quan và hiệu quả nhất để học Git trên web; ', '"Học Nhánh Git" là cách trực quan và hiệu quả nhất để học Git trên web; ',
'thông qua một loạt các thử thách cấp độ thú vị, bạn sẽ từng bước tìm hiểu sức mạnh của git', 'thông qua một loạt các thử thách cấp độ thú vị, bạn sẽ từng bước tìm hiểu sức mạnh của Git.',
'', '',
'Sau khi hội thoại này đóng lại, bạn sẽ thấy nhiều cấp độ mà chúng tôi cung cấp. ', 'Sau khi hộp thoại này đóng lại, bạn sẽ thấy nhiều cấp độ mà chúng tôi cung cấp. ',
'Nếu bạn là người mới thì hãy bắt đầu từ bài đầu tiên. Nếu bạn đã có hiểu biết cơ bản về git, ', 'Nếu bạn là người mới thì hãy bắt đầu từ bài đầu tiên. Nếu bạn đã có hiểu biết cơ bản về Git, ',
'hãy thử những bài mang tính thách thức hơn phía sau.', 'hãy thử những bài mang tính thách thức hơn phía sau.',
'', '',
'Bạn có thể dùng lệnh `show commands` để xem tất cả các lệnh hiện hữu.', 'Bạn có thể dùng lệnh `show commands` để xem tất cả các lệnh được hỗ trợ.',
'', '',
'Ghi chú: Nếu muốn trực tiếp vào hộp cát ở lần sau?', 'Ghi chú: Nếu muốn trực tiếp vào hộp cát (sandbox) ở lần sau?',
'Hãy dùng', 'Hãy dùng',
'[đường link đặc biệt này của chúng tôi](https://pcottle.github.io/learnGitBranching/?locale=vi&NODEMO)' '[đường link đặc biệt này của chúng tôi](https://pcottle.github.io/learnGitBranching/?locale=vi&NODEMO)',
'',
'Tái bút: GitHub đã đổi tên cho nhánh mặc định là `main` thay vì `master` ',
'nhằm tránh dùng thuật ngữ có xu hướng thiên vị [(xem chi tiết tại đây)](https://github.com/github/renaming). ',
'Để bắt kịp xu hướng công nghệ này, chúng tôi cũng đã cập nhật "Học Nhánh Git" sử ',
'dụng `main` thay thế cho `master` trong các bài học. Việc đổi tên được thực hiện khá nhất quán cho đến ',
'thời điểm hiện tại, nhưng nếu bạn phát hiện bất kỳ lỗi nào, đừng ngần ngại mà gửi một pull request (PR), hoặc tạo một vấn đề (New issue).'
] ]
} }
}], }],

View file

@ -62,7 +62,7 @@ exports.strings = {
'ru_RU': 'Отлично! Ваше решение соответствует или превосходит наше.', 'ru_RU': 'Отлично! Ваше решение соответствует или превосходит наше.',
'uk': 'Чудово! Твій розв’язок на рівні або кращий від нашого.', 'uk': 'Чудово! Твій розв’язок на рівні або кращий від нашого.',
'ko': '멋져요! 우리의 해답과 일치하거나 우리보다 좀 더 나은 해답입니다.', 'ko': '멋져요! 우리의 해답과 일치하거나 우리보다 좀 더 나은 해답입니다.',
'vi': 'Tuyệt vời! Đáp án của bạn đạt chuẩn thâm chí có thể tốt hơn.', 'vi': 'Tuyệt vời! Đáp án của bạn đạt chuẩn thm chí có thể tốt hơn.',
'sl_SI': 'Bravo! Izenačil ali celo presegel si našo rešitev.', 'sl_SI': 'Bravo! Izenačil ali celo presegel si našo rešitev.',
'pl': 'Niesamowite! Rozwiązałeś zadanie w ten sam sposób lub lepiej.', 'pl': 'Niesamowite! Rozwiązałeś zadanie w ten sam sposób lub lepiej.',
'it_IT': "Grandioso! Hai eguagliato o migliorato la nostra soluzione.", 'it_IT': "Grandioso! Hai eguagliato o migliorato la nostra soluzione.",
@ -107,7 +107,7 @@ exports.strings = {
'ru_RU': 'Внимание! Mercurial использует агрессивный сборщик мусора и обрезает ваше дерево', 'ru_RU': 'Внимание! Mercurial использует агрессивный сборщик мусора и обрезает ваше дерево',
'uk': 'Увага! Mercurial агресивно збирає сміття й може обрізати твоє дерево ', 'uk': 'Увага! Mercurial агресивно збирає сміття й може обрізати твоє дерево ',
'ko': '주의! Mercurial은 공격적으로 가비지 컬렉션을 수행하므로 트리를 정리할 필요가 있습니다.', 'ko': '주의! Mercurial은 공격적으로 가비지 컬렉션을 수행하므로 트리를 정리할 필요가 있습니다.',
'vi': 'Cảnh báo! Mercurial cần thực hiện thu gom rác và thu nhỏ cây lịch sử của bạn.', 'vi': 'Cảnh báo! Mercurial cần thực hiện thu gom rác và thu nhỏ cây lịch sử của bạn',
'sl_SI': 'Opozorilo! Mercurial ima agresivno politiko garbage collectiona in bo obrezal vaše drevo', 'sl_SI': 'Opozorilo! Mercurial ima agresivno politiko garbage collectiona in bo obrezal vaše drevo',
'pl': 'Ostrzeżenie! Mercurial prowadzi agresywną kolekcję śmieci i dlatego musi przycinać Twoje drzewo', 'pl': 'Ostrzeżenie! Mercurial prowadzi agresywną kolekcję śmieci i dlatego musi przycinać Twoje drzewo',
'it_IT': 'it_IT':
@ -197,7 +197,7 @@ exports.strings = {
'ru_RU': 'hg log без опции -f в настоящий момент не поддерживается, используйте -f', 'ru_RU': 'hg log без опции -f в настоящий момент не поддерживается, используйте -f',
'uk': 'hg log без опції -f в данний момент не підтримується, використовуй -f', 'uk': 'hg log без опції -f в данний момент не підтримується, використовуй -f',
'ko': '-f가 없는 hg log는 현재 지원되지 않습니다. -f를 사용하세요.', 'ko': '-f가 없는 hg log는 현재 지원되지 않습니다. -f를 사용하세요.',
'vi': 'Hiện tại thì `hg log` mà không có tùy chọn -f chưa được hỗ trợ, hãy viết thêm -f.', 'vi': 'Hiện tại thì `hg log` mà không có tùy chọn -f chưa được hỗ trợ, hãy viết thêm -f',
'sl_SI': 'hg log brez -f trenutno ni podprt, uporabi -f', 'sl_SI': 'hg log brez -f trenutno ni podprt, uporabi -f',
'pl': '`hg log` bez -f nie jest obecnie obsługiwany, użyj -f', 'pl': '`hg log` bez -f nie jest obecnie obsługiwany, użyj -f',
'it_IT': "hg log senza -f non è attualmente supportato, usa -f", 'it_IT': "hg log senza -f non è attualmente supportato, usa -f",
@ -328,7 +328,7 @@ exports.strings = {
'ru_RU': 'Ваша origin ветка не синхронизирована с удаленной веткой, невозможно выполнить fetch', 'ru_RU': 'Ваша origin ветка не синхронизирована с удаленной веткой, невозможно выполнить fetch',
'uk': 'Твоя гілка origin не синхронізована з віддаленою гілкою, неможливо виконати fetch', 'uk': 'Твоя гілка origin не синхронізована з віддаленою гілкою, неможливо виконати fetch',
'ko': '당신의 오리진 브랜치가 원격 브랜치와 동기화되지 않았고, 패치를 실행할 수 없습니다.', 'ko': '당신의 오리진 브랜치가 원격 브랜치와 동기화되지 않았고, 패치를 실행할 수 없습니다.',
'vi': 'Nhánh của bạn không đồng bộ với nhánh remote nên lệnh fetch không thực thi được.', 'vi': 'Nhánh của bạn không đồng bộ với nhánh từ xa nên lệnh fetch không thực thi được',
'sl_SI': 'Tvoj origin branch ni sinhroniziran z oddaljenim branchem, zato se fetch se ne more izvesti', 'sl_SI': 'Tvoj origin branch ni sinhroniziran z oddaljenim branchem, zato se fetch se ne more izvesti',
'pl': 'Twój branch nie jest zsynchronizowany ze zdalny branch-em i nie można przeprowadzić pobierania', 'pl': 'Twój branch nie jest zsynchronizowany ze zdalny branch-em i nie można przeprowadzić pobierania',
'it_IT': 'it_IT':
@ -372,7 +372,7 @@ exports.strings = {
'ru_RU': 'Вы не можете выполнить эту команду на удаленной ветке', 'ru_RU': 'Вы не можете выполнить эту команду на удаленной ветке',
'uk': 'Ти не можеш виконати цю команду на віддаленій гілці', 'uk': 'Ти не можеш виконати цю команду на віддаленій гілці',
'ko': '당신은 원격 브랜치에서 그 명령어를 실행시킬 수 없습니다.', 'ko': '당신은 원격 브랜치에서 그 명령어를 실행시킬 수 없습니다.',
'vi': 'Bạn không thể thực thi lệnh đó lên nhánh từ xa.', 'vi': 'Bạn không thể thực thi lệnh đó lên nhánh từ xa',
'sl_SI': 'Tega ukaza ne moreš narediti na oddaljenem branchu', 'sl_SI': 'Tega ukaza ne moreš narediti na oddaljenem branchu',
'pl' : 'Nie możesz wykonać tego polecenia w zdalnej gałęzi', 'pl' : 'Nie możesz wykonać tego polecenia w zdalnej gałęzi',
'it_it': "Non puoi eseguire questo comando su un ramo remoto", 'it_it': "Non puoi eseguire questo comando su un ramo remoto",
@ -393,7 +393,7 @@ exports.strings = {
'ru_RU': 'Origin требуется для этой команды', 'ru_RU': 'Origin требуется для этой команды',
'uk': 'Для цієї команди потрібний origin', 'uk': 'Для цієї команди потрібний origin',
'ko': '그 명령어를 위한 오리진이 필요합니다.', 'ko': '그 명령어를 위한 오리진이 필요합니다.',
'vi': 'Lệnh đó yêu cầu có origin.', 'vi': 'Lệnh đó yêu cầu có origin',
'sl_SI': 'Origin je potreben za izvedbo tega ukaza', 'sl_SI': 'Origin je potreben za izvedbo tega ukaza',
'pl' : 'Dla tego polecenia wymagane jest źródło (origin)', 'pl' : 'Dla tego polecenia wymagane jest źródło (origin)',
'it_IT': "E' necessario definire origin per questo comando", 'it_IT': "E' necessario definire origin per questo comando",
@ -437,7 +437,7 @@ exports.strings = {
'ru_RU' : 'Невозможно удалить ветку main, ветку на которой вы сейчас и то что не является веткой', 'ru_RU' : 'Невозможно удалить ветку main, ветку на которой вы сейчас и то что не является веткой',
'uk': 'Неможливо видалити гілку main, гілку на якій ти зараз знаходишся чи штуки які не є гілкою', 'uk': 'Неможливо видалити гілку main, гілку на якій ти зараз знаходишся чи штуки які не є гілкою',
'ko': '당신은 메인 브랜치, 당신이 현재 사용중인 브랜치, 또는 브랜치가 아닌 것들을 삭제할 수 없습니다.', 'ko': '당신은 메인 브랜치, 당신이 현재 사용중인 브랜치, 또는 브랜치가 아닌 것들을 삭제할 수 없습니다.',
'vi': 'Bạn không thể xóa nhánh main, nhánh mà bạn đang tham chiếu tới, hoặc những gì không phải nhánh.', 'vi': 'Bạn không thể xóa nhánh main, nhánh mà bạn đang tham chiếu tới, hoặc những gì không phải nhánh',
'sl_SI': 'Ne moreš izbrisati main brancha, brancha na katerem si trenutno ali stvari, ki niso branchi', 'sl_SI': 'Ne moreš izbrisati main brancha, brancha na katerem si trenutno ali stvari, ki niso branchi',
'pl' : 'Nie możesz usunąć gałezi main, gałęzi na której aktualnie pracujesz, ani która nie jest gałezią', 'pl' : 'Nie możesz usunąć gałezi main, gałęzi na której aktualnie pracujesz, ani która nie jest gałezią',
'it_IT': 'it_IT':
@ -461,7 +461,7 @@ exports.strings = {
'ru_RU': 'Слияние {target} в {current}', 'ru_RU': 'Слияние {target} в {current}',
'uk': 'Злиття {target} в {current}', 'uk': 'Злиття {target} в {current}',
'ko': '{target}을 {current}에 병합하세요.', 'ko': '{target}을 {current}에 병합하세요.',
'vi': 'Gộp {target} vào {current}.', 'vi': 'Gộp {target} vào {current}',
'sl_SI': 'Mergaj {target} v {current}', 'sl_SI': 'Mergaj {target} v {current}',
'pl' : 'Łączenie {target} z {current}', 'pl' : 'Łączenie {target} z {current}',
'it_IT': "Fuso {target} in {current}", 'it_IT': "Fuso {target} in {current}",
@ -483,7 +483,7 @@ exports.strings = {
'ru_RU': 'Нет коммитов для rebase! Все в коммите слияния или изменения уже применены', 'ru_RU': 'Нет коммитов для rebase! Все в коммите слияния или изменения уже применены',
'uk': 'Нема комітів для rebase! Все в коміті злиття (merge commit) чи зміни вже застосовані', 'uk': 'Нема комітів для rebase! Все в коміті злиття (merge commit) чи зміни вже застосовані',
'ko': 'rebase를 하기 위한 커밋이 없습니다! 모든 커밋과 변경 사항들의 병합은 이미 적용되었습니다.', 'ko': 'rebase를 하기 위한 커밋이 없습니다! 모든 커밋과 변경 사항들의 병합은 이미 적용되었습니다.',
'vi': 'Không có commit nào để rebase. Mọi thứ là merge commit hoặc thay đổi đã được áp dụng.', 'vi': 'Không có commit nào để rebase. Mọi thứ là merge commit hoặc thay đổi đã được áp dụng',
'sl_SI': 'Ni commitov za rebase! Vse je merge commit ali pa so spremembe že dodane', 'sl_SI': 'Ni commitov za rebase! Vse je merge commit ali pa so spremembe že dodane',
'pl' : 'Nie znaleziono commit-u do zmiany! Wszystkie commit-y oraz scalenia lub zmiany już są zastosowane', 'pl' : 'Nie znaleziono commit-u do zmiany! Wszystkie commit-y oraz scalenia lub zmiany już są zastosowane',
'it_IT': 'it_IT':
@ -506,7 +506,7 @@ exports.strings = {
'ru_RU': 'Нечего выполнять...', 'ru_RU': 'Нечего выполнять...',
'uk': 'Нічого виконувати...', 'uk': 'Нічого виконувати...',
'ko': '할게 없습니다 ...', 'ko': '할게 없습니다 ...',
'vi': 'Không có gì để làm ...', 'vi': 'Không có gì để làm...',
'sl_SI': 'Ničesar za narediti ...', 'sl_SI': 'Ničesar za narediti ...',
'pl' : 'Nie ma nic do zrobienia...', 'pl' : 'Nie ma nic do zrobienia...',
'it_IT': "Niente da fare...", 'it_IT': "Niente da fare...",
@ -550,7 +550,7 @@ exports.strings = {
'ru_RU': 'Ветка уже обновлена', 'ru_RU': 'Ветка уже обновлена',
'uk': 'Гілку вже оновлено', 'uk': 'Гілку вже оновлено',
'ko': '브랜치가 이미 최신 상태입니다.', 'ko': '브랜치가 이미 최신 상태입니다.',
'vi': 'Nhánh đã được cập nhật mới nhất.', 'vi': 'Nhánh đã được cập nhật mới nhất',
'sl_SI': 'Branch je že posodobljen', 'sl_SI': 'Branch je že posodobljen',
'pl' : 'Branch jest już aktualny', 'pl' : 'Branch jest już aktualny',
'it_IT': "Il ramo è già aggiornato", 'it_IT': "Il ramo è già aggiornato",
@ -572,7 +572,7 @@ exports.strings = {
'ru_RU': 'Ссылка {ref} не существует или неизвестна', 'ru_RU': 'Ссылка {ref} не существует или неизвестна',
'uk': 'Посилання {ref} не існує чи невідоме', 'uk': 'Посилання {ref} не існує чи невідоме',
'ko': '{ref} 참조가 존재하지 않거나 알 수 없습니다.', 'ko': '{ref} 참조가 존재하지 않거나 알 수 없습니다.',
'vi': 'Tham chiếu {ref} không tồn tại hoặc không thể tìm thấy.', 'vi': 'Tham chiếu {ref} không tồn tại hoặc không thể tìm thấy',
'sl_SI': 'Ref {ref} new obstaja ali je neznan', 'sl_SI': 'Ref {ref} new obstaja ali je neznan',
'pl' : 'Odnośnik {ref} nie istnieje lub jest nieznany', 'pl' : 'Odnośnik {ref} nie istnieje lub jest nieznany',
'it_IT': "Il riferimento (ref) {ref} non esiste o è sconosciuto", 'it_IT': "Il riferimento (ref) {ref} non esiste o è sconosciuto",
@ -594,7 +594,7 @@ exports.strings = {
'ru_RU': 'Коммит {commit} не содержит {match}', 'ru_RU': 'Коммит {commit} не содержит {match}',
'uk': 'Коміт {commit} не містить {match}', 'uk': 'Коміт {commit} не містить {match}',
'ko': '커밋 {commit}은 {match}를 가지고 있지 않습니다.', 'ko': '커밋 {commit}은 {match}를 가지고 있지 않습니다.',
'vi': 'Commit {commit} mà không có {match}.', 'vi': 'Commit {commit} mà không có {match}',
'sl_SI': 'Commit {commit} nima {match}', 'sl_SI': 'Commit {commit} nima {match}',
'pl' : 'Commit {commit} nie ma {match}', 'pl' : 'Commit {commit} nie ma {match}',
'it_IT': "Il commit {commit} non ha un {match}", 'it_IT': "Il commit {commit} non ha un {match}",
@ -638,7 +638,7 @@ exports.strings = {
'ru_RU': 'Это демо не оперирует файлами', 'ru_RU': 'Это демо не оперирует файлами',
'uk': 'Не потрібно додавати файли для цього демо', 'uk': 'Не потрібно додавати файли для цього демо',
'ko': '이 데모에서는 파일을 추가할 필요가 없습니다.', 'ko': '이 데모에서는 파일을 추가할 필요가 없습니다.',
'vi': 'Không cần thêm tập tin trong bản giới thiệu này.', 'vi': 'Không cần thêm tập tin trong bản demo này',
'sl_SI': 'Ni potrebe po dodajanju datotetk v tem demotu', 'sl_SI': 'Ni potrebe po dodajanju datotetk v tem demotu',
'pl' : 'Nie ma potrzeby dodawania plików w tym demo', 'pl' : 'Nie ma potrzeby dodawania plików w tym demo',
'it_IT': "Non c'è bisogno di aggiungere file in questa demo", 'it_IT': "Non c'è bisogno di aggiungere file in questa demo",
@ -660,7 +660,7 @@ exports.strings = {
'ru_RU': 'Неправильные опции', 'ru_RU': 'Неправильные опции',
'uk': 'Опції, які ти ввів, або некорректні або не підтримуються', 'uk': 'Опції, які ти ввів, або некорректні або не підтримуються',
'ko': '당신이 지정한 그 옵션들은 호환되지 않거나 올바르지 않습니다.', 'ko': '당신이 지정한 그 옵션들은 호환되지 않거나 올바르지 않습니다.',
'vi': 'Các tham số bạn chỉ định không tương thích hoặc không chính xác.', 'vi': 'Các tham số bạn chỉ định không tương thích hoặc không chính xác',
'sl_SI': 'Opcije, ki si jih podal, so nezdružljive ali napačne', 'sl_SI': 'Opcije, ki si jih podal, so nezdružljive ali napačne',
'pl' : 'Podane przez Ciebie opcje są niezgodne lub nieprawidłowe', 'pl' : 'Podane przez Ciebie opcje są niezgodne lub nieprawidłowe',
'it_IT': "Le opzioni che hai specificato sono incompatibili o sbagliate", 'it_IT': "Le opzioni che hai specificato sono incompatibili o sbagliate",
@ -682,7 +682,7 @@ exports.strings = {
'ru_RU': 'Коммит {commit} существует, отменяю!', 'ru_RU': 'Коммит {commit} существует, отменяю!',
'uk': 'Коміт {commit} вже існує в твоєму change set, відміна!', 'uk': 'Коміт {commit} вже існує в твоєму change set, відміна!',
'ko': '커밋 {commit}은 이미 당신의 변경 내역에 존재합니다. 중단!', 'ko': '커밋 {commit}은 이미 당신의 변경 내역에 존재합니다. 중단!',
'vi': 'Commit {commit} đã tồn tại trong những thay đổi của bạn. Đang hủy!', 'vi': 'Commit {commit} đã tồn tại trong những thay đổi của bạn, đang hủy!',
'sl_SI': 'Commit {commit} že obstaja v tvoji množici sprememb, prekinjam!', 'sl_SI': 'Commit {commit} že obstaja v tvoji množici sprememb, prekinjam!',
'pl' : 'Commit {commit} już istnieje w Twoim zbiorze zmian, przerywam!', 'pl' : 'Commit {commit} już istnieje w Twoim zbiorze zmian, przerywam!',
'it_IT': "Il commit {commit} è già presente, annullo!", 'it_IT': "Il commit {commit} è già presente, annullo!",
@ -704,7 +704,7 @@ exports.strings = {
'ru_RU': 'Это невозможно в режиме detached HEAD! Используйте checkout!', 'ru_RU': 'Это невозможно в режиме detached HEAD! Используйте checkout!',
'uk': 'Неможливо зробити reset в стані detached head! Використовуй checkout якщо хочеш змінити розташування', 'uk': 'Неможливо зробити reset в стані detached head! Використовуй checkout якщо хочеш змінити розташування',
'ko': '분리된 HEAD에서 reset할 수 없습니다. 만약 이동시키기를 원한다면 checkout을 사용하세요.', 'ko': '분리된 HEAD에서 reset할 수 없습니다. 만약 이동시키기를 원한다면 checkout을 사용하세요.',
'vi': 'Trong trạng thái tách rời `HEAD` thì không thể `reset`. Dùng `checkout` nếu bạn muốn di chuyển.', 'vi': 'Trong trạng thái tách rời `HEAD` thì không thể `reset`. Dùng `checkout` nếu bạn muốn di chuyển',
'sl_SI': 'Ni možno resetat, zaradi detached HEADa', 'sl_SI': 'Ni možno resetat, zaradi detached HEADa',
'pl' : 'Nie można zresetować w odłączonej HEAD! Użyj opcji `checkout`, jeśli chcesz się przenieść', 'pl' : 'Nie można zresetować w odłączonej HEAD! Użyj opcji `checkout`, jeśli chcesz się przenieść',
'it_IT': 'it_IT':
@ -763,7 +763,7 @@ exports.strings = {
'ru_RU': 'Это демо не работает с файлами, так что git add не нужен!', 'ru_RU': 'Это демо не работает с файлами, так что git add не нужен!',
'uk': 'В цьому демо немає можливості додати файл до робочої копії чи до стейджингу, тому ця опція чи команда некоректна чи не підтримується', 'uk': 'В цьому демо немає можливості додати файл до робочої копії чи до стейджингу, тому ця опція чи команда некоректна чи не підтримується',
'ko': '여기엔 파일을 추가하거나 스테이징한다는 개념이 없습니다. 따라서 그 옵션 또는 명령어는 유효하지 않습니다.', 'ko': '여기엔 파일을 추가하거나 스테이징한다는 개념이 없습니다. 따라서 그 옵션 또는 명령어는 유효하지 않습니다.',
'vi': 'Không có khái nệm thêm tập tin đệm(staging file), nên tùy chọn đó là bất hợp lệ.', 'vi': 'Không có khái niệm thêm tập tin đệm (staging file), nên tùy chọn đó là bất hợp lệ!',
'sl_SI': 'Tu ni možnosti addanja/stageanja datotek, zato je ta ukaz nepravilen', 'sl_SI': 'Tu ni možnosti addanja/stageanja datotek, zato je ta ukaz nepravilen',
'pl' : 'Nie ma koncepcji na dodawanie/indeksowanie zmian, więc opcja lub polecenie jest niepoprawne.', 'pl' : 'Nie ma koncepcji na dodawanie/indeksowanie zmian, więc opcja lub polecenie jest niepoprawne.',
'it_IT': 'it_IT':
@ -787,7 +787,7 @@ exports.strings = {
'ru_RU': 'Откатываю {oldCommit}: {oldMsg}', 'ru_RU': 'Откатываю {oldCommit}: {oldMsg}',
'uk': 'Повертаю {oldCommit}: {oldMsg}', 'uk': 'Повертаю {oldCommit}: {oldMsg}',
'ko': '{oldCommit}:{oldMsg}를 복구중입니다.', 'ko': '{oldCommit}:{oldMsg}를 복구중입니다.',
'vi': 'Hoàn tác {oldCommit}:{oldMsg}.', 'vi': 'Đang hoàn tác {oldCommit}: {oldMsg}',
'sl_SI': 'Revertanje {oldCommit}: {oldMsg}', 'sl_SI': 'Revertanje {oldCommit}: {oldMsg}',
'pl' : 'Cofam {oldCommit} : {oldMsg}', 'pl' : 'Cofam {oldCommit} : {oldMsg}',
'it_IT': "Ripristino {oldCommit}: {oldMsg}", 'it_IT': "Ripristino {oldCommit}: {oldMsg}",
@ -809,7 +809,7 @@ exports.strings = {
'ru_RU': 'Ожидается максимум {upper} аргумент(ов) для {what}', 'ru_RU': 'Ожидается максимум {upper} аргумент(ов) для {what}',
'uk': 'Я очікую максимум {upper} аргумент(ів) для {what}', 'uk': 'Я очікую максимум {upper} аргумент(ів) для {what}',
'ko': '{what}을 위해 최대 {upper}개의 인자를 받습니다.', 'ko': '{what}을 위해 최대 {upper}개의 인자를 받습니다.',
'vi': 'Có thể có nhiều nhất {upper} tham số cho {what}.', 'vi': 'Có thể có nhiều nhất {upper} tham số cho {what}',
'sl_SI': 'Pričakovanih je največ {upper} argumentov za {what}', 'sl_SI': 'Pričakovanih je največ {upper} argumentov za {what}',
'pl' : 'Oczekuję maksymalne {upper} parametrów dla {what}', 'pl' : 'Oczekuję maksymalne {upper} parametrów dla {what}',
'it_IT': "Mi aspetto al massimo {upper} parametro/i per {what}", 'it_IT': "Mi aspetto al massimo {upper} parametro/i per {what}",
@ -831,7 +831,7 @@ exports.strings = {
'ru_RU': 'Ожидается как минимум {lower} аргументов для {what}', 'ru_RU': 'Ожидается как минимум {lower} аргументов для {what}',
'uk': 'Я очікую як мінімум {lower} аргумент(ів) для {what}', 'uk': 'Я очікую як мінімум {lower} аргумент(ів) для {what}',
'ko': '{what}을 위해 최소 {lower}개의 인자를 받습니다.', 'ko': '{what}을 위해 최소 {lower}개의 인자를 받습니다.',
'vi': 'Cần ít nhất {lower} tham số cho {what}.', 'vi': 'Cần ít nhất {lower} tham số cho {what}',
'sl_SI': 'Pričakovanih je najmanj {lower} argumentov za {what}', 'sl_SI': 'Pričakovanih je najmanj {lower} argumentov za {what}',
'pl' : 'Oczekuję co najmniej {lower} parametrów dla {what}', 'pl' : 'Oczekuję co najmniej {lower} parametrów dla {what}',
'it_IT': "Mi aspetto come minimo {lower} parametro/i per {what}", 'it_IT': "Mi aspetto come minimo {lower} parametro/i per {what}",
@ -853,7 +853,7 @@ exports.strings = {
'ru_RU': 'Это команда без аргументов', 'ru_RU': 'Это команда без аргументов',
'uk': 'Ця команда не приймає загальних аргументів', 'uk': 'Ця команда не приймає загальних аргументів',
'ko': '그 명령어는 일반적으로 인자를 받지 않습니다.', 'ko': '그 명령어는 일반적으로 인자를 받지 않습니다.',
'vi': 'Lệnh đó không chấp nhận các tham số chung.', 'vi': 'Lệnh đó không chấp nhận các tham số chung',
'sl_SI': 'Ta ukaz ne sprejme splošnih ukazov', 'sl_SI': 'Ta ukaz ne sprejme splošnih ukazov',
'pl' : 'To polecenie nie przyjmuje żadnych ogólnych parametrów', 'pl' : 'To polecenie nie przyjmuje żadnych ogólnych parametrów',
'it_IT': "Quel comando non accetta parametri generici", 'it_IT': "Quel comando non accetta parametri generici",
@ -866,7 +866,8 @@ exports.strings = {
'de_DE': 'Entschuldigung, der Befehl "{command}" wird nicht unterstützt!', 'de_DE': 'Entschuldigung, der Befehl "{command}" wird nicht unterstützt!',
'zh_TW': '很抱歉,目前無法支援指令 "{command}"!', 'zh_TW': '很抱歉,目前無法支援指令 "{command}"!',
'it_IT': 'Mi spiace, il comando "{command}" non è supportato.', 'it_IT': 'Mi spiace, il comando "{command}" non è supportato.',
'pl' : 'Polecenie "{command}" niestety nie jest obsługiwane.' 'pl' : 'Polecenie "{command}" niestety nie jest obsługiwane.',
'vi': 'Xin lỗi, lệnh "{command}" không được hỗ trợ!'
}, },
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
'copy-tree-string': { 'copy-tree-string': {
@ -884,7 +885,7 @@ exports.strings = {
'ru_RU': 'Скопируй текст ниже', 'ru_RU': 'Скопируй текст ниже',
'uk': 'Скопіюй рядок дерева нижче', 'uk': 'Скопіюй рядок дерева нижче',
'ko': '다음 트리 문자열을 복사하세요.', 'ko': '다음 트리 문자열을 복사하세요.',
'vi': 'Sao chép chuỗi cây bên dưới.', 'vi': 'Sao chép chuỗi cây bên dưới',
'sl_SI': 'Skopiraj besedilo drevesa spodaj', 'sl_SI': 'Skopiraj besedilo drevesa spodaj',
'pl' : 'Skopiuj poniższy kod', 'pl' : 'Skopiuj poniższy kod',
'it_IT': "Copia il codice dell'albero qua sotto", 'it_IT': "Copia il codice dell'albero qua sotto",
@ -907,7 +908,7 @@ exports.strings = {
'ru_RU': 'Изучаем ветвление в git', 'ru_RU': 'Изучаем ветвление в git',
'uk': 'Вивчай Git Branching', 'uk': 'Вивчай Git Branching',
'ko': '깃 브랜칭을 배워봅시다.', 'ko': '깃 브랜칭을 배워봅시다.',
'vi': 'Học nhánh Git.', 'vi': 'Học nhánh Git',
'sl_SI': 'Nauči se Git Branching', 'sl_SI': 'Nauči se Git Branching',
'pl': 'Naucz się Git Branching-u', 'pl': 'Naucz się Git Branching-u',
'it_IT': "Impara Git Branching", 'it_IT': "Impara Git Branching",
@ -929,7 +930,7 @@ exports.strings = {
'ru_RU': 'Выбери уровень', 'ru_RU': 'Выбери уровень',
'uk': 'Обери рівень', 'uk': 'Обери рівень',
'ko': '레벨을 선택하세요.', 'ko': '레벨을 선택하세요.',
'vi': 'Chọn một cấp độ.', 'vi': 'Chọn một cấp độ',
'sl_SI': 'Izberi stopnjo', 'sl_SI': 'Izberi stopnjo',
'pl': 'Wybierz poziom', 'pl': 'Wybierz poziom',
'it_IT': "Scegli un livello", 'it_IT': "Scegli un livello",
@ -987,7 +988,7 @@ exports.strings = {
'ru_RU': 'Для наглядности нам нужно сохранять имена веток короткими. Твоё название сокращено до 9 символов и теперь это "{branch}"', 'ru_RU': 'Для наглядности нам нужно сохранять имена веток короткими. Твоё название сокращено до 9 символов и теперь это "{branch}"',
'uk': 'Вибач, нам потрібно щоб ім’я гілок було як можна коротше для наглядності. Твоє ім’я гілки було скорочене до 9 літер й тепер це "{branch}"', 'uk': 'Вибач, нам потрібно щоб ім’я гілок було як можна коротше для наглядності. Твоє ім’я гілки було скорочене до 9 літер й тепер це "{branch}"',
'ko': '미안하지만, 우리는 시각적으로 더 좋게 보기위해 짧은 브랜치명이 필요합니다. 당신의 브랜치명은 9자리로 잘라 "{branch}"로 만들었습니다.', 'ko': '미안하지만, 우리는 시각적으로 더 좋게 보기위해 짧은 브랜치명이 필요합니다. 당신의 브랜치명은 9자리로 잘라 "{branch}"로 만들었습니다.',
'vi': 'Xin lỗi, chúng tôi cần giữ tên nhánh ngắn để tiện minh họa. Tên nhánh của bạn đã bị cắt xuống 9 ký tự là "{branch}".', 'vi': 'Xin lỗi, chúng tôi cần giữ tên nhánh ngắn để tiện minh họa. Tên nhánh của bạn đã bị cắt xuống 9 ký tự là "{branch}"',
'sl_SI': 'Oprosti, imena branchev moramo obdržati kratka zaradi vizualizacije. Tvoje ime brancha je bilo skrajšano na 9 črk, kar predstavlja "{branch}"', 'sl_SI': 'Oprosti, imena branchev moramo obdržati kratka zaradi vizualizacije. Tvoje ime brancha je bilo skrajšano na 9 črk, kar predstavlja "{branch}"',
'pl': 'Przepraszamy, ze względu na wizualizacje musimy zachować krótkie nazwy gałęzi. Nazwa Twojej gałęzi została skrócona do 9 znaków, w wyniku czego otrzymano "{branch}"', 'pl': 'Przepraszamy, ze względu na wizualizacje musimy zachować krótkie nazwy gałęzi. Nazwa Twojej gałęzi została skrócona do 9 znaków, w wyniku czego otrzymano "{branch}"',
'it_IT': 'it_IT':
@ -1010,7 +1011,7 @@ exports.strings = {
'ru_RU': 'Название для ветки "{branch}" недопустимо!', 'ru_RU': 'Название для ветки "{branch}" недопустимо!',
'uk': 'Назва гілки "{branch}" є недопустимою', 'uk': 'Назва гілки "{branch}" є недопустимою',
'ko': '"{branch}"라는 브랜치명은 사용할 수 없습니다.', 'ko': '"{branch}"라는 브랜치명은 사용할 수 없습니다.',
'vi': 'Tên nhánh "{branch}" không được chấp nhận.', 'vi': 'Tên nhánh "{branch}" không được chấp nhận!',
'sl_SI': 'To ime brancha "{branch}" ni dovoljeno!', 'sl_SI': 'To ime brancha "{branch}" ni dovoljeno!',
'pl': 'Ta nazwa gałęzi "{branch}" jest niedozwolona!', 'pl': 'Ta nazwa gałęzi "{branch}" jest niedozwolona!',
'it_IT': 'Il nome "{branch}" per i rami non è consentito!', 'it_IT': 'Il nome "{branch}" per i rami non è consentito!',
@ -1032,7 +1033,7 @@ exports.strings = {
'ru_RU': 'Название для тега "{tag}" недопустимо!', 'ru_RU': 'Название для тега "{tag}" недопустимо!',
'uk': 'Назва тегу "{tag}" є недопустимою', 'uk': 'Назва тегу "{tag}" є недопустимою',
'ko': '"{tag}"라는 태그명은 사용할 수 없습니다.', 'ko': '"{tag}"라는 태그명은 사용할 수 없습니다.',
'vi': 'Tên thẻ "{tag}" không được chấp nhận.', 'vi': 'Tên thẻ "{tag}" không được chấp nhận!',
'sl_SI': 'To ime tag-a "{tag}" ni dovoljeno!', 'sl_SI': 'To ime tag-a "{tag}" ni dovoljeno!',
'pl': 'Ta nazwa tagu "{tag}" jest niedozwolona!', 'pl': 'Ta nazwa tagu "{tag}" jest niedozwolona!',
'it_IT': 'Il nome "{tag}" per i tag non è consentito!', 'it_IT': 'Il nome "{tag}" per i tag non è consentito!',
@ -1054,7 +1055,7 @@ exports.strings = {
'ru_RU': 'Опция "{option}" недопустима!', 'ru_RU': 'Опция "{option}" недопустима!',
'uk': 'Опція "{option}" не підтримується!', 'uk': 'Опція "{option}" не підтримується!',
'ko': '"{option}"(이)라는 옵션은 지원하지 않습니다.', 'ko': '"{option}"(이)라는 옵션은 지원하지 않습니다.',
'vi': 'Tùy chọn "{option}" không được hỗ trợ.', 'vi': 'Tùy chọn "{option}" không được hỗ trợ!',
'sl_SI': 'Opcija "{option}" ni podprta! ', 'sl_SI': 'Opcija "{option}" ni podprta! ',
'pl': 'Opcja "{option}" nie jest obsługiwana!', 'pl': 'Opcja "{option}" nie jest obsługiwana!',
'it_IT': 'L\'opzione "{option}" non è supportata!', 'it_IT': 'L\'opzione "{option}" non è supportata!',
@ -1141,8 +1142,8 @@ exports.strings = {
'fr_FR': 'Git version PCOTTLE.1.0', 'fr_FR': 'Git version PCOTTLE.1.0',
'ru_RU': 'Версия git PCOTTLE.1.0', 'ru_RU': 'Версия git PCOTTLE.1.0',
'uk': 'Версія git PCOTTLE.1.0', 'uk': 'Версія git PCOTTLE.1.0',
'ko': 'Git Version PCOTILE.1.0', 'ko': 'Git Version PCOTTLE.1.0',
'vi': 'Phiên bản Git TTC-Solutions.1.0', 'vi': 'Phiên bản Git PCOTTLE.1.0',
'sl_SI': 'Git Verzija PCOTTLE.1.0', 'sl_SI': 'Git Verzija PCOTTLE.1.0',
'pl' : 'Wersja GIT-a OLSZA-YSC-1.0', 'pl' : 'Wersja GIT-a OLSZA-YSC-1.0',
'it_IT': "Git Version SHARDANA_SOFT.1.0.0", 'it_IT': "Git Version SHARDANA_SOFT.1.0.0",
@ -1186,7 +1187,7 @@ exports.strings = {
'ru_RU': 'Обновляю дерево...', 'ru_RU': 'Обновляю дерево...',
'uk': 'Оновлюю дерево...', 'uk': 'Оновлюю дерево...',
'ko': '트리 다시 불러오는중...', 'ko': '트리 다시 불러오는중...',
'vi': 'Làm mới cây...', 'vi': 'Đang làm mới cây...',
'sl_SI': 'Osveževanje drevesa ...', 'sl_SI': 'Osveževanje drevesa ...',
'pl' : 'Odświeżanie drzewa...', 'pl' : 'Odświeżanie drzewa...',
'it_IT': "Aggiornando l'albero...", 'it_IT': "Aggiornando l'albero...",
@ -1208,7 +1209,7 @@ exports.strings = {
'ru_RU': 'Локаль теперь равна {locale}', 'ru_RU': 'Локаль теперь равна {locale}',
'uk': 'Локаль тепер дорівнює {locale}', 'uk': 'Локаль тепер дорівнює {locale}',
'ko': '로케일이 {locale}로 설정되었습니다.', 'ko': '로케일이 {locale}로 설정되었습니다.',
'vi': 'Ngôn ngữ được thay đổi thành {locale}.', 'vi': 'Ngôn ngữ được thay đổi thành {locale}',
'sl_SI': 'Locale nastavljen na {locale}', 'sl_SI': 'Locale nastavljen na {locale}',
'pl' : 'Ustawiono język na {locale}', 'pl' : 'Ustawiono język na {locale}',
'it_IT': "Locale impostato a {locale}", 'it_IT': "Locale impostato a {locale}",
@ -1230,7 +1231,7 @@ exports.strings = {
'ru_RU': 'Локаль сброшена. Теперь она равна {locale}', 'ru_RU': 'Локаль сброшена. Теперь она равна {locale}',
'uk': 'Локаль скинута. Тепер вона дорівнює {locale}', 'uk': 'Локаль скинута. Тепер вона дорівнює {locale}',
'ko': '로케일이 {locale}로 초기화 되었습니다.', 'ko': '로케일이 {locale}로 초기화 되었습니다.',
'vi': 'Ngôn ngữ được đổi thành mặc định: {locale}.', 'vi': 'Ngôn ngữ được đổi thành mặc định: {locale}',
'sl_SI': 'Locale ponastavljen na {locale}', 'sl_SI': 'Locale ponastavljen na {locale}',
'pl' : 'Przywrócono język do wartości domyślnych, czyli {locale}', 'pl' : 'Przywrócono język do wartości domyślnych, czyli {locale}',
'it_IT': "Locale resettato al valore di default, che è {locale}", 'it_IT': "Locale resettato al valore di default, che è {locale}",
@ -1252,7 +1253,7 @@ exports.strings = {
'ru_RU': 'Для получения большей информации используй следующие команды:', 'ru_RU': 'Для получения большей информации используй следующие команды:',
'uk': 'Щоб отримати більше інформації використовуй наступні команди:', 'uk': 'Щоб отримати більше інформації використовуй наступні команди:',
'ko': '더 많은 정보를 위해 다음 명령어들중 하나를 사용하세요.', 'ko': '더 많은 정보를 위해 다음 명령어들중 하나를 사용하세요.',
'vi': 'Vui lòng dùng một trong các lệnh sau để có thêm thông tin:.', 'vi': 'Vui lòng dùng một trong các lệnh sau để có thêm thông tin:',
'sl_SI': 'Prosim uporabi enega od naslednjih ukazov', 'sl_SI': 'Prosim uporabi enega od naslednjih ukazov',
'pl' : 'Aby uzyskać więcej informacji, użyj jednego z następujących poleceń:', 'pl' : 'Aby uzyskać więcej informacji, użyj jednego z następujących poleceń:',
'it_IT': "Usa uno dei seguenti comandi per maggiori informazioni:", 'it_IT': "Usa uno dei seguenti comandi per maggiori informazioni:",
@ -1274,7 +1275,7 @@ exports.strings = {
'ru_RU': 'Вот все поддерживаемые команды:', 'ru_RU': 'Вот все поддерживаемые команды:',
'uk': 'Ось список всіх можливих команд:', 'uk': 'Ось список всіх можливих команд:',
'ko': '여기에 사용 가능한 모든 명령어들의 리스트가 있습니다.', 'ko': '여기에 사용 가능한 모든 명령어들의 리스트가 있습니다.',
'vi': 'Dưới đây là danh sách tất cả các lệnh hiện hành:.', 'vi': 'Dưới đây là danh sách tất cả các lệnh có sẵn:',
'sl_SI': 'Tu je seznam vseh možnih ukazov:', 'sl_SI': 'Tu je seznam vseh možnih ukazov:',
'pl' : 'Oto lista wszystkich dostępnych poleceń:', 'pl' : 'Oto lista wszystkich dostępnych poleceń:',
'it_IT': "Ecco la lista con tutti i comandi disponibili:", 'it_IT': "Ecco la lista con tutti i comandi disponibili:",
@ -1296,7 +1297,7 @@ exports.strings = {
'ru_RU': 'Директория изменена на "/директории/не/важны/в/этом/демо"', 'ru_RU': 'Директория изменена на "/директории/не/важны/в/этом/демо"',
'uk': 'Директорія змінена на "/директорії/не/мають/значення/в/цьому/демо"', 'uk': 'Директорія змінена на "/директорії/не/мають/значення/в/цьому/демо"',
'ko': '디렉토리가 "/directories/dont/matter/in/this/demo"로 변경되었습니다.', 'ko': '디렉토리가 "/directories/dont/matter/in/this/demo"로 변경되었습니다.',
'vi': 'Thay đổi thư mục thành "/directories/dont/matter/in/this/demo".', 'vi': 'Thay đổi thư mục thành "/directories/dont/matter/in/this/demo"',
'sl_SI': 'Mapa spremenjena na "/directories/dont/matter/in/this/demo"', 'sl_SI': 'Mapa spremenjena na "/directories/dont/matter/in/this/demo"',
'pl' : 'Katalog zmieniony na "/home/users/windows/pl/demo"', 'pl' : 'Katalog zmieniony na "/home/users/windows/pl/demo"',
'it_IT': 'Cartella modificata in "/directories/dont/matter/in/this/demo"', 'it_IT': 'Cartella modificata in "/directories/dont/matter/in/this/demo"',
@ -1362,7 +1363,7 @@ exports.strings = {
'ru_RU': 'Поделись деревом с друзьями! Они могут загрузить его при помощи "import tree"', 'ru_RU': 'Поделись деревом с друзьями! Они могут загрузить его при помощи "import tree"',
'uk': 'Поділись цим деревом з друзями! Вони зможуть його завантажити за допомогою "import tree"', 'uk': 'Поділись цим деревом з друзями! Вони зможуть його завантажити за допомогою "import tree"',
'ko': '친구들과 이 트리를 공유하세요! 그들은 "import tree"를 사용해 이를 로드할 수 있습니다.', 'ko': '친구들과 이 트리를 공유하세요! 그들은 "import tree"를 사용해 이를 로드할 수 있습니다.',
'vi': 'Hãy chia sẻ cây này với bạn của mình! Họ có thể dùng "import tree" để tải.', 'vi': 'Hãy chia sẻ cây này với bạn của mình! Họ có thể dùng "import tree" để tải',
'sl_SI': 'Deli to drevo s prijatelji! Lahko ga naložijo z "import tree"', 'sl_SI': 'Deli to drevo s prijatelji! Lahko ga naložijo z "import tree"',
'pl' : 'Udostępnij to drzewo znajomym! Mogą je załadować za pomocą "import tree"', 'pl' : 'Udostępnij to drzewo znajomym! Mogą je załadować za pomocą "import tree"',
'it_IT': 'it_IT':
@ -1385,7 +1386,7 @@ exports.strings = {
'ru_RU': 'Вставь JSON ниже!', 'ru_RU': 'Вставь JSON ниже!',
'uk': 'Встав JSON нижче!', 'uk': 'Встав JSON нижче!',
'ko': '아래에 JSON blob을 붙여넣으세요.', 'ko': '아래에 JSON blob을 붙여넣으세요.',
'vi': 'Dán một chuỗi JSON xuống bên dưới.', 'vi': 'Dán một chuỗi JSON xuống bên dưới!',
'sl_SI': 'Prilepi JSON kodo spodaj!', 'sl_SI': 'Prilepi JSON kodo spodaj!',
'pl' : 'Wklej poniżej obiekt z kodem JSON!', 'pl' : 'Wklej poniżej obiekt z kodem JSON!',
'it_IT': "Incolla un blob JSON qui sotto!", 'it_IT': "Incolla un blob JSON qui sotto!",
@ -1407,7 +1408,7 @@ exports.strings = {
'ru_RU': 'Всё сброшено! Можно начать с чистого листа!', 'ru_RU': 'Всё сброшено! Можно начать с чистого листа!',
'uk': 'Все скинуте! Можна починати з чистого аркушу!', 'uk': 'Все скинуте! Можна починати з чистого аркушу!',
'ko': '해결된 지도가 초기화 되었습니다. 당신은 깨끗한 상태에서 시작합니다.', 'ko': '해결된 지도가 초기화 되었습니다. 당신은 깨끗한 상태에서 시작합니다.',
'vi': 'Tất cả đáp án đã được xóa, bạn có thể bắt đầu lại từ đầu.', 'vi': 'Tất cả đáp án đã được xóa, bạn có thể bắt đầu lại từ đầu!',
'sl_SI': 'Rešena mapa je ponastavljena, začel boš lahko na novo!', 'sl_SI': 'Rešena mapa je ponastavljena, začel boš lahko na novo!',
'pl' : 'Rozwiązania zostały wyczyszczone, zaczynasz z czystą kartą.', 'pl' : 'Rozwiązania zostały wyczyszczone, zaczynasz z czystą kartą.',
'it_IT': "I progresse salvati sono stati resettati, stai iniziando da zero!", 'it_IT': "I progresse salvati sono stati resettati, stai iniziando da zero!",
@ -1429,7 +1430,7 @@ exports.strings = {
'ru_RU': 'Ты не проходишь уровень! Ты в песочнице! Чтобы начать уровень, используй команду "levels"!', 'ru_RU': 'Ты не проходишь уровень! Ты в песочнице! Чтобы начать уровень, используй команду "levels"!',
'uk': 'Ти не в рівні! Ти в пісочниці! Почни рівень з "levels"', 'uk': 'Ти не в рівні! Ти в пісочниці! Почни рівень з "levels"',
'ko': '당신은 샌드박스에 있습니다. "levels"를 사용하여 레벨을 시작하세요.', 'ko': '당신은 샌드박스에 있습니다. "levels"를 사용하여 레벨을 시작하세요.',
'vi': 'Bạn hiện không ở cấp độ nào cả! Hãy bắt đầu một cấp độ với "levels".', 'vi': 'Bạn hiện không ở cấp độ nào cả! Bạn đang ở trong hộp cát (sandbox), hãy bắt đầu một cấp độ với "levels"',
'sl_SI': 'Nisi v stopnji! Si v peskovniku, začni stopnjo z "levels"', 'sl_SI': 'Nisi v stopnji! Si v peskovniku, začni stopnjo z "levels"',
'pl' : 'Nie jesteś na poziomie! Jesteś w trybie piaskownicy, zacznij poziom wpisując "levels"', 'pl' : 'Nie jesteś na poziomie! Jesteś w trybie piaskownicy, zacznij poziom wpisując "levels"',
'it_IT': 'it_IT':
@ -1452,7 +1453,7 @@ exports.strings = {
'ru_RU': 'Уровень с id "{id}" не найден! Открываю выбор уровней', 'ru_RU': 'Уровень с id "{id}" не найден! Открываю выбор уровней',
'uk': 'Рівень з id "{id}" не знайдений! Відкриваю вибір рівней', 'uk': 'Рівень з id "{id}" не знайдений! Відкриваю вибір рівней',
'ko': 'id "{id}"에 대한 레벨이 존재하지 않습니다. 레벨 선택 화면을 열어보세요.', 'ko': 'id "{id}"에 대한 레벨이 존재하지 않습니다. 레벨 선택 화면을 열어보세요.',
'vi': 'Không tìm thấy cấp độ cho định danh "{id}". Mở cửa sổ chọn cấp độ.', 'vi': 'Không tìm thấy cấp độ cho định danh "{id}"! Mở cửa sổ chọn cấp độ',
'sl_SI': 'Stopnja za ta id "{id}" ni bila najdena! Odpiram pogled za izbiro stopnje', 'sl_SI': 'Stopnja za ta id "{id}" ni bila najdena! Odpiram pogled za izbiro stopnje',
'pl' : 'Nie znaleziono poziomu {id}!. Otwieranie widoku wyboru poziomu...', 'pl' : 'Nie znaleziono poziomu {id}!. Otwieranie widoku wyboru poziomu...',
'it_IT': 'it_IT':
@ -1497,7 +1498,7 @@ exports.strings = {
'ru_RU': 'Ты уже прошел этот уровень, попробуй пройти другие при помощи команды "levels" или иди в песочницу "sandbox"', 'ru_RU': 'Ты уже прошел этот уровень, попробуй пройти другие при помощи команды "levels" или иди в песочницу "sandbox"',
'uk': 'Ти вже пройшов цей рівень, спробуй інші рівні з "levels" чи повернись в пісочницю з "sandbox"', 'uk': 'Ти вже пройшов цей рівень, спробуй інші рівні з "levels" чи повернись в пісочницю з "sandbox"',
'ko': '당신은 이미 이 레벨을 해결했습니다. "levels"를 사용하여 다른 레벨에 도전하거나 "sandbox"를 사용하여 샌드박스로 돌아가세요.', 'ko': '당신은 이미 이 레벨을 해결했습니다. "levels"를 사용하여 다른 레벨에 도전하거나 "sandbox"를 사용하여 샌드박스로 돌아가세요.',
'vi': 'Bạn đã vượt qua cấp độ này. Thử cấp độ khác với "levels" hoặc dùng "sandbox" để trở lại hộp cát.', 'vi': 'Bạn đã vượt qua cấp độ này. Thử cấp độ khác với "levels" hoặc dùng "sandbox" để trở lại hộp cát',
'sl_SI': 'To stopnjo si že rešil, poizkusi druge stopnje z "levels" ali pojdi nazaj v peskovnik s "sandbox"', 'sl_SI': 'To stopnjo si že rešil, poizkusi druge stopnje z "levels" ali pojdi nazaj v peskovnik s "sandbox"',
'pl' : 'Już rozwiązałeś ten poziom, wypróbuj inne, używając "levels" lub wróć do trybu piaskownicy za pomocą polecenia "sandbox"', 'pl' : 'Już rozwiązałeś ten poziom, wypróbuj inne, używając "levels" lub wróć do trybu piaskownicy za pomocą polecenia "sandbox"',
'it_IT': 'it_IT':
@ -1539,7 +1540,7 @@ exports.strings = {
'ru_RU': 'На этом уровне нельзя использовать эту команду!', 'ru_RU': 'На этом уровне нельзя использовать эту команду!',
'uk': 'На цьому рівні не можна використовувати цю команду!', 'uk': 'На цьому рівні не можна використовувати цю команду!',
'ko': '그 Git 명령어는 이 레벨에서 사용할 수 없습니다.', 'ko': '그 Git 명령어는 이 레벨에서 사용할 수 없습니다.',
'vi': 'Ở cấp độ này thì lệnh git đó bị vô hiệu hóa.', 'vi': 'Ở cấp độ này thì lệnh git đó bị vô hiệu hóa!',
'sl_SI': 'Ta git ukaz je onemogočen za to stopnjo!', 'sl_SI': 'Ta git ukaz je onemogočen za to stopnjo!',
'pl' : 'To polecenie Gita jest wyłączone na tym poziomie!', 'pl' : 'To polecenie Gita jest wyłączone na tym poziomie!',
'it_IT': "Questo comando git è disabilitato per questo livello!", 'it_IT': "Questo comando git è disabilitato per questo livello!",
@ -1561,7 +1562,7 @@ exports.strings = {
'ru_RU': 'Вот JSON для этого уровня! Поделись им с кем-нибудь или отправь его нам на GitHub', 'ru_RU': 'Вот JSON для этого уровня! Поделись им с кем-нибудь или отправь его нам на GitHub',
'uk': 'Ось JSON для цього рівня! Поділись з кимось чи відправ мені його на GitHub', 'uk': 'Ось JSON для цього рівня! Поділись з кимось чи відправ мені його на GitHub',
'ko': '이 레벨을 위한 JSON 데이터가 있습니다! 이를 다른 사람들과 공유하거나 GitHub에서 제게 보내보세요.', 'ko': '이 레벨을 위한 JSON 데이터가 있습니다! 이를 다른 사람들과 공유하거나 GitHub에서 제게 보내보세요.',
'vi': 'Đây là chuỗi JSON cho cấp độ này! Hãy chia sẻ với người khắc hoặc với tôi qua GitHub.', 'vi': 'Đây là chuỗi JSON cho cấp độ này! Hãy chia sẻ với người khác hoặc với tôi qua GitHub',
'sl_SI': 'Tu je JSON za to stopnjo! Deli ga z nekom ali ga pošlji meni na GitHub', 'sl_SI': 'Tu je JSON za to stopnjo! Deli ga z nekom ali ga pošlji meni na GitHub',
'pl' : 'To jest JSON dla tego poziomu. Udostępnij go, komu chcesz, lub wyślij do mnie na GitHub.', 'pl' : 'To jest JSON dla tego poziomu. Udostępnij go, komu chcesz, lub wyślij do mnie na GitHub.',
'it_IT': 'it_IT':
@ -1584,7 +1585,7 @@ exports.strings = {
'ru_RU': 'Не указано стартово сообщение! Точно продолжаем?', 'ru_RU': 'Не указано стартово сообщение! Точно продолжаем?',
'uk': 'Не вказано стартовий діалог, хочеш додати стартовий діалог?', 'uk': 'Не вказано стартовий діалог, хочеш додати стартовий діалог?',
'ko': '당신은 시작 대화창을 지정하지 않았습니다. 추가 하시겠습니까?', 'ko': '당신은 시작 대화창을 지정하지 않았습니다. 추가 하시겠습니까?',
'vi': 'Không có cửa sổ hội thoại được chỉ định, thêm một cái chứ?', 'vi': 'Không có cửa sổ hộp thoại được chỉ định, thêm một cái chứ?',
'sl_SI': 'Nisi določil začetnega dialoga, bi ga rad dodal?', 'sl_SI': 'Nisi določil začetnega dialoga, bi ga rad dodal?',
'pl' : 'Nie określiłeś okna startowego, czy chcesz je dodać?', 'pl' : 'Nie określiłeś okna startowego, czy chcesz je dodać?',
'it_IT': 'it_IT':
@ -1629,7 +1630,7 @@ exports.strings = {
'ru_RU': 'Введи подсказку для уровня, если хочешь.', 'ru_RU': 'Введи подсказку для уровня, если хочешь.',
'uk': 'Додай підказку для рівня, якщо хочеш', 'uk': 'Додай підказку для рівня, якщо хочеш',
'ko': '이 레벨을 위한 힌트를 입력하거나 만약 이를 포함시키고 싶지 않을 경우엔 비워두세요.', 'ko': '이 레벨을 위한 힌트를 입력하거나 만약 이를 포함시키고 싶지 않을 경우엔 비워두세요.',
'vi': 'Thêm một gợi ý cho cấp độ này, hoặc cứ để trống nếu bạn không muốn thêm.', 'vi': 'Thêm một gợi ý cho cấp độ này, hoặc cứ để trống nếu bạn không muốn thêm',
'sl_SI': 'Vnesi namig za to stopnjo ali pusti to prazno, če ga nočeš dodati', 'sl_SI': 'Vnesi namig za to stopnjo ali pusti to prazno, če ga nočeš dodati',
'pl' : 'Wpisz wskazówkę dotyczącą tego poziomu lub pozostaw ją pustą, jeśli nie chcesz jej uwzględniać.', 'pl' : 'Wpisz wskazówkę dotyczącą tego poziomu lub pozostaw ją pustą, jeśli nie chcesz jej uwzględniać.',
'it_IT': 'it_IT':
@ -1652,7 +1653,7 @@ exports.strings = {
'ru_RU': 'Введи название уровня', 'ru_RU': 'Введи название уровня',
'uk': 'Введи назву рівня', 'uk': 'Введи назву рівня',
'ko': '레벨 이름을 입력하세요.', 'ko': '레벨 이름을 입력하세요.',
'vi': 'Nhập tên cho cấp độ này.', 'vi': 'Nhập tên cho cấp độ này',
'sl_SI': 'Vnesi ime za stopnjo', 'sl_SI': 'Vnesi ime za stopnjo',
'pl' : 'Wprowadź nazwę poziomu', 'pl' : 'Wprowadź nazwę poziomu',
'it_IT': "Inserisci il nome per questo livello", 'it_IT': "Inserisci il nome per questo livello",
@ -1674,7 +1675,7 @@ exports.strings = {
'ru_RU': 'Решение не указано! Так не годится!', 'ru_RU': 'Решение не указано! Так не годится!',
'uk': 'Розв’язок порожній!! Щось не так', 'uk': 'Розв’язок порожній!! Щось не так',
'ko': '해답이 비어있습니다. 무언가 잘못되었습니다.', 'ko': '해답이 비어있습니다. 무언가 잘못되었습니다.',
'vi': 'Đáp án bị bỏ trống!! Có gì thiếu rồi.', 'vi': 'Đáp án bị bỏ trống!! Có gì thiếu rồi',
'sl_SI': 'Tvoja rešitev je prazna!! Nekaj ni vredu.', 'sl_SI': 'Tvoja rešitev je prazna!! Nekaj ni vredu.',
'pl' : 'Twoje rozwiązanie jest puste!! Coś musi zostać zrobione.', 'pl' : 'Twoje rozwiązanie jest puste!! Coś musi zostać zrobione.',
'it_IT': "C'è qualcosa che non va. La soluzione è vuota!! ", 'it_IT': "C'è qualcosa che non va. La soluzione è vuota!! ",
@ -1696,7 +1697,7 @@ exports.strings = {
'ru_RU': 'Устанавливаю стартовую точку... Решение и итоговое состояние будут стёрты, если они указаны ранее', 'ru_RU': 'Устанавливаю стартовую точку... Решение и итоговое состояние будут стёрты, если они указаны ранее',
'uk': 'Встановлюю стартову точку... розв’язок та ціль будуть переписані якщо вони були задані раніше', 'uk': 'Встановлюю стартову точку... розв’язок та ціль будуть переписані якщо вони були задані раніше',
'ko': '시작 지점을 정의하세요... 만약 그것이 먼저 정의된다면 해답과 목표가 덮어씌워질 것입니다.', 'ko': '시작 지점을 정의하세요... 만약 그것이 먼저 정의된다면 해답과 목표가 덮어씌워질 것입니다.',
'vi': 'Xác định điểm bắt đầu ... Các giải pháp và mục tiêu sẽ được thay thế nếu đã được chỉ định từ trước.', 'vi': 'Đang xác định điểm bắt đầu... Các giải pháp và mục tiêu sẽ được thay thế nếu đã được chỉ định từ trước',
'sl_SI': 'Določanje začetne točke ... rešitev in cilj bosta povožena, če sta bila prej že podana', 'sl_SI': 'Določanje začetne točke ... rešitev in cilj bosta povožena, če sta bila prej že podana',
'pl' : 'Ustawianie punktu startowego... Rozwiązanie i cel zostaną nadpisane, jeśli zostały wcześniej zdefiniowane', 'pl' : 'Ustawianie punktu startowego... Rozwiązanie i cel zostaną nadpisane, jeśli zostały wcześniej zdefiniowane',
'it_IT': 'it_IT':
@ -1742,7 +1743,7 @@ exports.strings = {
'ru_RU': 'При создании уровней доступны несколько видов помощи. Выбери между "help general" и "help builder"', 'ru_RU': 'При создании уровней доступны несколько видов помощи. Выбери между "help general" и "help builder"',
'uk': 'При створенні рівня доступні декілька різновидів допомоги. Виберіть або "help general", чи "help builder"', 'uk': 'При створенні рівня доступні декілька різновидів допомоги. Виберіть або "help general", чи "help builder"',
'ko': '당신은 한 레벨 생성기에 들어가 있고, 여러가지 도움 양식들을 사용할 수 있습니다. "help general" 또는 "help builder"를 선택해주세요.', 'ko': '당신은 한 레벨 생성기에 들어가 있고, 여러가지 도움 양식들을 사용할 수 있습니다. "help general" 또는 "help builder"를 선택해주세요.',
'vi': 'Bạn đang tạo một cấp độ, nên sẽ có nhiều trợ giúp có sẵn. Vui lòng chọn "help general" hoặc "help builder".', 'vi': 'Bạn đang tạo một cấp độ, nên sẽ có nhiều trợ giúp có sẵn. Vui lòng chọn "help general" hoặc "help builder"',
'sl_SI': 'Si v graditelju stopenj, zato so na voljo različne pomoči. Prosim izberi "help general" ali "help builder"', 'sl_SI': 'Si v graditelju stopenj, zato so na voljo različne pomoči. Prosim izberi "help general" ali "help builder"',
'pl' : 'Znajdujesz się w kreatorze poziomów. Dostępnych jest tu kilka rodzajów pomocy. Wpisz "help general", aby uzyskać pomoc dotyczącą nauki GitBranching-u, lub wpisz "help builder", aby uzyskać pomoc dotyczącą konstruktora poziomów', 'pl' : 'Znajdujesz się w kreatorze poziomów. Dostępnych jest tu kilka rodzajów pomocy. Wpisz "help general", aby uzyskać pomoc dotyczącą nauki GitBranching-u, lub wpisz "help builder", aby uzyskać pomoc dotyczącą konstruktora poziomów',
'it_IT': 'it_IT':
@ -1873,7 +1874,7 @@ exports.strings = {
'ru_RU': '<span class="fwber">Важно:</span> В этом уровне проверяется только ветка main. Остальные ветки просто для наглядности. Как обычно, можно скрыть это сообщение при помощи "hide goal"', 'ru_RU': '<span class="fwber">Важно:</span> В этом уровне проверяется только ветка main. Остальные ветки просто для наглядности. Как обычно, можно скрыть это сообщение при помощи "hide goal"',
'uk': '<span class="fwber">Важливо:</span> В цьому рівні буде перевірятися тільки гілка main. Решта гілок тільки для наглядності (показані пунктиром нижче). Як завжди, можна сховати цей діалог за допомогою "hide goal"', 'uk': '<span class="fwber">Важливо:</span> В цьому рівні буде перевірятися тільки гілка main. Решта гілок тільки для наглядності (показані пунктиром нижче). Як завжди, можна сховати цей діалог за допомогою "hide goal"',
'ko': '<span class="fwber">Note:</span> 이 레벨에선 오직 메인 브랜치만이 검사될 것입니다.. 다른 브랜치들은 단순히 참고용입니다. (아래에 대시 라벨로 보여집니다.). "hide goal"을 사용하여 언제든지 창을 숨길 수 있습니다.', 'ko': '<span class="fwber">Note:</span> 이 레벨에선 오직 메인 브랜치만이 검사될 것입니다.. 다른 브랜치들은 단순히 참고용입니다. (아래에 대시 라벨로 보여집니다.). "hide goal"을 사용하여 언제든지 창을 숨길 수 있습니다.',
'vi': '<span class="fwber">Chú ý:</span> Ở cấp độ này chỉ nhánh main bị kiểm tra. Các nhánh khác chỉ dùng để tham chiếu(có dấu - ở nhãn). Như thường lệ, bạn có thể ẩn mục tiêu bằng "hide goal".', 'vi': '<span class="fwber">Chú ý:</span> Ở cấp độ này chỉ nhánh main bị kiểm tra. Các nhánh khác chỉ dùng để tham chiếu (có dấu - ở nhãn). Như thường lệ, bạn có thể ẩn mục tiêu bằng "hide goal"',
'sl_SI': '<span class="fwber">Opomba:</span> Samo main branch bo preverjen v tej stopnji. Ostali branchi so zgolj za referenco (prikazani kot črtaste oznake spodaj). Kot ponavadi, lahko skriješ dialog z "hide goal"', 'sl_SI': '<span class="fwber">Opomba:</span> Samo main branch bo preverjen v tej stopnji. Ostali branchi so zgolj za referenco (prikazani kot črtaste oznake spodaj). Kot ponavadi, lahko skriješ dialog z "hide goal"',
'pl': '<span class="fwber"> Uwaga:</span> Na tym poziomie będzie sprawdzana tylko poprawność gałęzi main. Pozostałe gałęzie są tylko odniesieniem (pokazane jako przerywane etykiety poniżej). Jak zawsze, możesz ukryć to okno klikając "Ukryj cel".', 'pl': '<span class="fwber"> Uwaga:</span> Na tym poziomie będzie sprawdzana tylko poprawność gałęzi main. Pozostałe gałęzie są tylko odniesieniem (pokazane jako przerywane etykiety poniżej). Jak zawsze, możesz ukryć to okno klikając "Ukryj cel".',
'it_IT': 'it_IT':
@ -1897,7 +1898,7 @@ exports.strings = {
'ru_RU': 'Можно скрыть это окно при помощи "hide goal"', 'ru_RU': 'Можно скрыть это окно при помощи "hide goal"',
'uk': 'Можна сховати це вікно за допомогою "hide goal"', 'uk': 'Можна сховати це вікно за допомогою "hide goal"',
'ko': '"hide goal"을 사용하여 이 창을 숨길 수 있습니다.', 'ko': '"hide goal"을 사용하여 이 창을 숨길 수 있습니다.',
'vi': 'Bạn có thể ẩn cửa sổ này với "hide goal".', 'vi': 'Bạn có thể ẩn cửa sổ này với "hide goal"',
'sl_SI': 'To okno lahko skriješ z "hide goal"', 'sl_SI': 'To okno lahko skriješ z "hide goal"',
'pl': 'Możesz ukryć to okno za pomocą opcji "ukryj cel"', 'pl': 'Możesz ukryć to okno za pomocą opcji "ukryj cel"',
'it_IT': 'Puoi nascondere questa finestra con "hide goal"', 'it_IT': 'Puoi nascondere questa finestra con "hide goal"',
@ -1920,7 +1921,7 @@ exports.strings = {
'ru_RU': 'Можно скрыть это окно при помощи "hide start"', 'ru_RU': 'Можно скрыть это окно при помощи "hide start"',
'uk': 'Можна сховати це вікно за допомогою "hide start"', 'uk': 'Можна сховати це вікно за допомогою "hide start"',
'ko': '"hide start"를 사용하여 이 창을 숨길 수 있습니다.', 'ko': '"hide start"를 사용하여 이 창을 숨길 수 있습니다.',
'vi': 'Bạn có thể ẩn cửa sổ này với "hide start".', 'vi': 'Bạn có thể ẩn cửa sổ này với "hide start"',
'sl_SI': 'To okno lahko skriješ z "hide start"', 'sl_SI': 'To okno lahko skriješ z "hide start"',
'pl': 'Możesz ukryć to okno za pomocą opcji "ukryj start"', 'pl': 'Możesz ukryć to okno za pomocą opcji "ukryj start"',
'it_IT': 'Puoi nascondere questa finestra con "hide start"', 'it_IT': 'Puoi nascondere questa finestra con "hide start"',
@ -1943,7 +1944,7 @@ exports.strings = {
'ru_RU': 'Редактор уровней', 'ru_RU': 'Редактор уровней',
'uk': 'Редактор рівнів', 'uk': 'Редактор рівнів',
'ko': '레벨 생성기', 'ko': '레벨 생성기',
'vi': 'Trình tạo câp độ', 'vi': 'Trình tạo cp độ',
'sl_SI': 'Graditelj Stopenj', 'sl_SI': 'Graditelj Stopenj',
'pl': 'Twórca poziomu', 'pl': 'Twórca poziomu',
'it_IT': "Generatore di livelli", 'it_IT': "Generatore di livelli",
@ -1966,7 +1967,7 @@ exports.strings = {
'ru_RU': 'Нет стартового сообщение для уровня!', 'ru_RU': 'Нет стартового сообщение для уровня!',
'uk': 'Немає початкового діалогу для цього рівня!', 'uk': 'Немає початкового діалогу для цього рівня!',
'ko': '이 레벨을 위한 시작 대화창이 없습니다.', 'ko': '이 레벨을 위한 시작 대화창이 없습니다.',
'vi': 'Cấp độ này không được giới thiệu.', 'vi': 'Không có hộp thoại giới thiệu cho cấp độ này!',
'sl_SI': 'Ni začetnega dialoga za prikaz te stopnje!', 'sl_SI': 'Ni začetnega dialoga za prikaz te stopnje!',
'pl': 'Dla tego poziomu nie ma okna startowego do wyświetlenia!', 'pl': 'Dla tego poziomu nie ma okna startowego do wyświetlenia!',
'it_it': "Non esiste una finestra di partenza per questo livello!", 'it_it': "Non esiste una finestra di partenza per questo livello!",
@ -1989,7 +1990,7 @@ exports.strings = {
'ru_RU': "Милый мой, хороший, догадайся сам :-/ Подсказка не создана...", 'ru_RU': "Милый мой, хороший, догадайся сам :-/ Подсказка не создана...",
'uk': 'Хм, схоже для цього рівня немає підказки :-/', 'uk': 'Хм, схоже для цього рівня немає підказки :-/',
'ko': '흠, 이 레벨을 위한 힌트가 없어보이는군요.', 'ko': '흠, 이 레벨을 위한 힌트가 없어보이는군요.',
'vi': 'Hmmm, có vẻ cấp độ này không có gợi ý rồi. :-/', 'vi': 'Hmmm, có vẻ cấp độ này không có gợi ý rồi :-/',
'sl_SI': 'Hmm, izgleda da ni namiga za to stopnjo :-/', 'sl_SI': 'Hmm, izgleda da ni namiga za to stopnjo :-/',
'pl': 'Hmm, wydaje się, że nie ma podpowiedzi dla tego poziomu :-/', 'pl': 'Hmm, wydaje się, że nie ma podpowiedzi dla tego poziomu :-/',
'it_IT': "Mmh, sembra non ci sia un suggerimento per questo livello :-/", 'it_IT': "Mmh, sembra non ci sia un suggerimento per questo livello :-/",
@ -2036,7 +2037,7 @@ exports.strings = {
'ru_RU': 'Для этого сообщения нет перевода :( Пожалуйста, предложи перевод на GitHub', 'ru_RU': 'Для этого сообщения нет перевода :( Пожалуйста, предложи перевод на GitHub',
'uk': 'Для цього повідомлення ще немає перекладу :( Будь-ласка, запропонуй переклад на GitHub', 'uk': 'Для цього повідомлення ще немає перекладу :( Будь-ласка, запропонуй переклад на GitHub',
'ko': '이 대화창이나 텍스트는 아직 번역되지 않았습니다. :( 번역에 참여해주세요!', 'ko': '이 대화창이나 텍스트는 아직 번역되지 않았습니다. :( 번역에 참여해주세요!',
'vi': 'Hội thoại hoặc văn bản này chưa được dịch ra ngôn ngữ của bạn rồi. :( Hãy lên GitHub để cung cấp bản dịch!', 'vi': 'Hộp thoại hoặc văn bản này chưa được dịch ra ngôn ngữ của bạn rồi :( Hãy lên GitHub để cung cấp bản dịch!',
'sl_SI': 'Ta dialog ali tekst še ni preveden za tvoj jezik :( Skoči na github in dodaj prevod!', 'sl_SI': 'Ta dialog ali tekst še ni preveden za tvoj jezik :( Skoči na github in dodaj prevod!',
'pl' : 'Kolejne okno dialogowe lub tekst nie zostało jeszcze przetłumaczone na język polski :( Zapraszam na GitHub, aby pomóc w tłumaczeniu!', 'pl' : 'Kolejne okno dialogowe lub tekst nie zostało jeszcze przetłumaczone na język polski :( Zapraszam na GitHub, aby pomóc w tłumaczeniu!',
'it_IT': 'it_IT':
@ -2053,7 +2054,8 @@ exports.strings = {
'zh_TW': '取消', 'zh_TW': '取消',
'pl' : 'Powrót', 'pl' : 'Powrót',
'it_IT': "Annulla", 'it_IT': "Annulla",
'ta_IN': 'இரத்துசெய்' 'ta_IN': 'இரத்துசெய்',
'vi': 'Hủy'
}, },
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
'confirm-button': { 'confirm-button': {
@ -2065,11 +2067,12 @@ exports.strings = {
'zh_TW': '確認', 'zh_TW': '確認',
'pl' : 'Dalej', 'pl' : 'Dalej',
'it_IT': "Conferma", 'it_IT': "Conferma",
'ta_IN': 'உறுதிப்படுத்தவும்' 'ta_IN': 'உறுதிப்படுத்தவும்',
'vi': 'Đồng ý'
}, },
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
'level-label': { 'level-label': {
'__desc__': 'Label in the top of the left-side menu. Rembember to leave some space on the sides', '__desc__': 'Label in the top of the left-side menu. Remember to leave some space on the sides',
'es_AR': 'Nivel', 'es_AR': 'Nivel',
'en_US': ' Level ', 'en_US': ' Level ',
'es_MX': 'Nivel', 'es_MX': 'Nivel',
@ -2154,7 +2157,8 @@ exports.strings = {
'zh_TW': '這項指令輸入正確,然而目前的環境不支援此指令。試著前往關卡或關卡建造器中使用此指令。', 'zh_TW': '這項指令輸入正確,然而目前的環境不支援此指令。試著前往關卡或關卡建造器中使用此指令。',
'it_IT': 'it_IT':
"Il comando è valido, ma non supportato in questo ambiente! Prova a entrare in un livello o nel generatore di livelli per usare quel comando", "Il comando è valido, ma non supportato in questo ambiente! Prova a entrare in un livello o nel generatore di livelli per usare quel comando",
'pl' : 'To polecenie jest poprawne, ale nie jest obsługiwane w obecnym środowisku! Spróbuj wybrać poziom lub włączyć konstruktor poziomów, aby użyć tej komendy' 'pl' : 'To polecenie jest poprawne, ale nie jest obsługiwane w obecnym środowisku! Spróbuj wybrać poziom lub włączyć konstruktor poziomów, aby użyć tej komendy',
'vi': 'Lệnh đó hợp lệ, nhưng không được hỗ trợ ở môi trường hiện tại! Hãy thử vào một cấp độ hoặc trình tạo cấp độ để sử dụng lệnh'
}, },
/////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////
'interactive-rebase-title': { 'interactive-rebase-title': {
@ -2165,6 +2169,7 @@ exports.strings = {
'de_DE': 'Interaktives Rebase', 'de_DE': 'Interaktives Rebase',
'zh_TW': '互動式 Rebase', 'zh_TW': '互動式 Rebase',
'it_IT': "Rebase interattivo", 'it_IT': "Rebase interattivo",
'pl' : 'Interaktywny Rebase' 'pl' : 'Interaktywny Rebase',
'vi': 'Rebase tương tác'
}, },
}; };

View file

@ -1278,7 +1278,7 @@ exports.level = {
"", "",
"Thông thường thì sẽ chọn cha \"đầu tiên\" từ commit merge, nhưng nếu sau dấu `^` có một con số thì cách hành xử sẽ khác đi.", "Thông thường thì sẽ chọn cha \"đầu tiên\" từ commit merge, nhưng nếu sau dấu `^` có một con số thì cách hành xử sẽ khác đi.",
"", "",
"Không nói dông dài nữa, làm thử một ví dụ nào", "Không nói dông dài nữa, làm thử một ví dụ nào.",
"" ""
] ]
} }
@ -1289,7 +1289,7 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Ở đây ta có 1 commit merge. Nếu ta dùng lệnh `main^` mà không bổ nghĩa cho nó, ta sẽ đi ngược lên commit cha đầu tiên của merge commit. ", "Ở đây ta có 1 commit merge. Nếu ta dùng lệnh `main^` mà không bổ nghĩa cho nó, ta sẽ đi ngược lên commit cha đầu tiên của merge commit. ",
"", "",
"(*Trong hình minh họa bên trái thì commit cha đầu tiên được xếp hẳng hàng ngay phía trên của commit merge.*)" "(*Trong hình minh họa bên trái thì commit cha đầu tiên được xếp thẳng hàng ngay phía trên của commit merge.*)"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Dễ dàng -- đó là cách mà ta thường làm." "Dễ dàng -- đó là cách mà ta thường làm."

View file

@ -69,7 +69,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ko' : 'git 기본', 'ko' : 'git 기본',
'ru_RU': 'Введение', 'ru_RU': 'Введение',
'uk' : 'Вступ', 'uk' : 'Вступ',
'vi' : 'Giới thiệu chuỗi luyện tập', 'vi' : 'Giới Thiệu Chuỗi Luyện Tập',
'sl_SI': 'Uvodno Zaporedje', 'sl_SI': 'Uvodno Zaporedje',
'pl' : 'Wprowadzenie', 'pl' : 'Wprowadzenie',
'it_IT': "Sequenza introduttiva", 'it_IT': "Sequenza introduttiva",
@ -90,7 +90,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ko' : 'git의 주요 명령어를 깔끔하게 알려드립니다', 'ko' : 'git의 주요 명령어를 깔끔하게 알려드립니다',
'ru_RU': 'Хорошо подобранное введение в основные команды git', 'ru_RU': 'Хорошо подобранное введение в основные команды git',
'uk' : 'Гарно підібране введення в основні команди git', 'uk' : 'Гарно підібране введення в основні команди git',
'vi' : 'Từng bước làm quen với phần lớn lệnh điều khiển git', 'vi' : 'Từng bước làm quen với phần lớn lệnh điều khiển Git',
'sl_SI': 'Prijeten uvod v git ukaze', 'sl_SI': 'Prijeten uvod v git ukaze',
'pl' : 'Krótkie wprowadzenie do większości poleceń Gita', 'pl' : 'Krótkie wprowadzenie do większości poleceń Gita',
'it_IT': "Un'introduzione graduale ai principali comandi Git", 'it_IT': "Un'introduzione graduale ai principali comandi Git",
@ -113,7 +113,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Едем дальше', 'ru_RU': 'Едем дальше',
'uk' : 'Їдемо далі', 'uk' : 'Їдемо далі',
'ko' : '다음 단계로', 'ko' : '다음 단계로',
'vi' : 'Tăng tốc', 'vi' : 'Tăng Tốc',
'sl_SI': 'Prva Stopnička', 'sl_SI': 'Prva Stopnička',
'pl' : 'Rozkręcenie', 'pl' : 'Rozkręcenie',
'it_IT': "Diamoci dentro", 'it_IT': "Diamoci dentro",
@ -134,7 +134,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?', 'ru_RU': 'Следующая порция абсолютной git-крутотенюшки. Проголодались?',
'uk' : 'Наступна порція абсолютної git-дивини. Сподіваюсь, ви зголодніли', 'uk' : 'Наступна порція абсолютної git-дивини. Сподіваюсь, ви зголодніли',
'ko' : 'git은 아주 멋져요. 왜 멋진지 알려드립니다', 'ko' : 'git은 아주 멋져요. 왜 멋진지 알려드립니다',
'vi' : 'Tận hưởng khẩu phần tuyệt hảo của git. Hi vọng bạn còn đói.', 'vi' : 'Tận hưởng khẩu phần tuyệt hảo của Git. Hi vọng bạn còn đói',
'sl_SI': 'Naslednja porcija git izjemnosti. Upam, da si lačen', 'sl_SI': 'Naslednja porcija git izjemnosti. Upam, da si lačen',
'pl' : 'Następna porcja gita jest niesamowita. Mam nadzieję, że jesteś głodny', 'pl' : 'Następna porcja gita jest niesamowita. Mam nadzieję, że jesteś głodny',
'it_IT': "Porzione con il 100% di grandiosità Git, spero tu sia affamato", 'it_IT': "Porzione con il 100% di grandiosità Git, spero tu sia affamato",
@ -158,7 +158,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Push & Pull - удалённые репозитории в Git!', 'ru_RU': 'Push & Pull - удалённые репозитории в Git!',
'uk' : 'Push & Pull -- віддалені репозиторії в Git!', 'uk' : 'Push & Pull -- віддалені репозиторії в Git!',
'ko' : 'Push & Pull -- Git 원격 저장소!', 'ko' : 'Push & Pull -- Git 원격 저장소!',
'vi' : 'Push & Pull -- Tác động git từ xa!', 'vi' : 'Push & Pull -- Git Remotes!',
'sl_SI': 'Push & Pull -- Oddaljeni Git', 'sl_SI': 'Push & Pull -- Oddaljeni Git',
'pl' : 'Push & Pull -- Zdalne repozytoria', 'pl' : 'Push & Pull -- Zdalne repozytoria',
'it_IT': "Push & Pull -- Git Remoto!", 'it_IT': "Push & Pull -- Git Remoto!",
@ -204,7 +204,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes', 'ru_RU': 'Через origin к звёздам. Продвинутое использование Git Remotes',
'uk' : 'Через origin до зірок. Прогресивне використання Git Remotes', 'uk' : 'Через origin до зірок. Прогресивне використання Git Remotes',
'ko' : '"origin"그 너머로 -- 고급 Git 원격 저장소', 'ko' : '"origin"그 너머로 -- 고급 Git 원격 저장소',
'vi' : 'Về với cội nguồn và vươn xa hơn -- nâng cao về các git remote', 'vi' : 'Về Với Cội Nguồn Và Vươn Xa Hơn -- Git Remote Nâng Cao',
'sl_SI': 'Do Origina In Naprej -- Napredni Oddaljeni Git', 'sl_SI': 'Do Origina In Naprej -- Napredni Oddaljeni Git',
'pl' : 'Do źródła i dalej -- zaawansowane zdalne repozytoria', 'pl' : 'Do źródła i dalej -- zaawansowane zdalne repozytoria',
'it_IT': "Verso Origin e oltre -- Git Remoto Avanzato!", 'it_IT': "Verso Origin e oltre -- Git Remoto Avanzato!",
@ -225,7 +225,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Весело было быть всесильным мудрым правителем...', 'ru_RU': 'Весело было быть всесильным мудрым правителем...',
'uk' : 'А ти думав, що бути всесильним диктатором весело...', 'uk' : 'А ти думав, що бути всесильним диктатором весело...',
'ko' : '자비로운 독재자가 되는게 재밌을 줄 알았겠지만...', 'ko' : '자비로운 독재자가 되는게 재밌을 줄 알았겠지만...',
'vi' : 'Và bạn nghĩ làm một kẻ độc tài nhân từ thì sẽ vui ...', 'vi' : 'Và bạn nghĩ làm một kẻ độc tài nhân từ thì sẽ vui...',
'sl_SI': 'In ti si mislil, da je biti dobronamerni diktator zabavno ...', 'sl_SI': 'In ti si mislil, da je biti dobronamerni diktator zabavno ...',
'pl' : 'A myślałeś, że bycie życzliwym dyktatorem byłoby fajne...', 'pl' : 'A myślałeś, że bycie życzliwym dyktatorem byłoby fajne...',
'it_IT': "E tu credevi che essere un dittatore benevolo fosse divertente...", 'it_IT': "E tu credevi che essere un dittatore benevolo fosse divertente...",
@ -248,7 +248,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_TW': '調整提交順序', 'zh_TW': '調整提交順序',
'ru_RU': 'Перемещаем труды туда-сюда', 'ru_RU': 'Перемещаем труды туда-сюда',
'uk' : 'Переміщуємо роботу туди-сюди', 'uk' : 'Переміщуємо роботу туди-сюди',
'vi' : 'Điều chỉnh vị trí', 'vi' : 'Di Chuyển Commit',
'sl_SI': 'Premikanje Dela Naokrog', 'sl_SI': 'Premikanje Dela Naokrog',
'pl' : 'Przenoszenie pracy', 'pl' : 'Przenoszenie pracy',
'it_IT': "Spostare il lavoro in giro", 'it_IT': "Spostare il lavoro in giro",
@ -269,7 +269,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_TW': '自由修改提交樹', 'zh_TW': '自由修改提交樹',
'ru_RU': 'Не стесняйтесь менять историю', 'ru_RU': 'Не стесняйтесь менять историю',
'uk' : 'Не соромимось змінювати історію', 'uk' : 'Не соромимось змінювати історію',
'vi' : 'Chỉnh sửa cây lịch sử Git không hề khó', 'vi' : 'Dễ dàng chỉnh sửa cây lịch sử với "Git" :P',
'sl_SI': 'Spretno "Git" premikanje po drevesu :P', 'sl_SI': 'Spretno "Git" premikanje po drevesu :P',
'pl' : 'Git dobrze radzi sobie z modyfikacją drzewa źródłowego :P', 'pl' : 'Git dobrze radzi sobie z modyfikacją drzewa źródłowego :P',
'it_IT': 'Modificare l\'albero con facilità. "GIT" ready :P', 'it_IT': 'Modificare l\'albero con facilità. "GIT" ready :P',
@ -292,7 +292,7 @@ var sequenceInfo = exports.sequenceInfo = {
'zh_TW': '活用 git 的指令', 'zh_TW': '活用 git 的指令',
'ru_RU': 'Сборная солянка', 'ru_RU': 'Сборная солянка',
'uk' : 'Всяке', 'uk' : 'Всяке',
'vi' : 'Những trò mèo đáng đồng tiền bát gạo', 'vi' : 'Vài Mẹo Linh Tinh',
'sl_SI': 'Mešana Vreča', 'sl_SI': 'Mešana Vreča',
'pl' : 'Po trochu wszystkiego', 'pl' : 'Po trochu wszystkiego',
'it_IT': "Un po' di tutto", 'it_IT': "Un po' di tutto",
@ -336,7 +336,7 @@ var sequenceInfo = exports.sequenceInfo = {
'ru_RU': 'Продвинутый уровень', 'ru_RU': 'Продвинутый уровень',
'uk' : 'Досвідчений рівень', 'uk' : 'Досвідчений рівень',
'ko' : '고급 문제', 'ko' : '고급 문제',
'vi' : 'Các chủ đề nâng cao', 'vi' : 'Các Chủ Đề Nâng Cao',
'sl_SI': 'Napredne Teme', 'sl_SI': 'Napredne Teme',
'pl' : 'Tematy zaawansowane', 'pl' : 'Tematy zaawansowane',
'it_IT': "Argomenti avanzati", 'it_IT': "Argomenti avanzati",

View file

@ -37,7 +37,7 @@ exports.level = {
"ko": "\"git branch [브랜치명]\"으로 새 브랜치를 만들고, \"git checkout [브랜치명]\"로 그 브랜치로 이동하세요", "ko": "\"git branch [브랜치명]\"으로 새 브랜치를 만들고, \"git checkout [브랜치명]\"로 그 브랜치로 이동하세요",
"ru_RU": "Создай новую ветку при помощи \"git branch [name]\" и перейди на неё при помощи \"git checkout [name]\"", "ru_RU": "Создай новую ветку при помощи \"git branch [name]\" и перейди на неё при помощи \"git checkout [name]\"",
"uk": "Створи нову гілку за допомогою \"git branch [ім’я]\" й перейди на неї за допомогою \"git checkout [ім’я]\"", "uk": "Створи нову гілку за допомогою \"git branch [ім’я]\" й перейди на неї за допомогою \"git checkout [ім’я]\"",
"vi": "Tạo một nhánh mới với lệnh \"git branch <ten-nhanh>\" và chuyển sang đó với lệnh \"git checkout <ten-nhanh>\"", "vi": "Tạo một nhánh mới với lệnh \"git branch [ten-nhanh]\" và chuyển sang đó với lệnh \"git checkout [ten-nhanh]\"",
"sl_SI": "Naredi nov branch z \"git branch [ime-brancha]\" in ga checkoutaj z \"git checkout [ime-brancha]\"", "sl_SI": "Naredi nov branch z \"git branch [ime-brancha]\" in ga checkoutaj z \"git checkout [ime-brancha]\"",
"pl": "Utwórz nową gałąź za pomocą \"git branch <nazwa-gałęzi>\" i przełącz się na nią za pomocą \"git checkout <nazwa-gałęzi>\"", "pl": "Utwórz nową gałąź za pomocą \"git branch <nazwa-gałęzi>\" i przełącz się na nią za pomocą \"git checkout <nazwa-gałęzi>\"",
"it_IT": 'Crea un nuovo ramo con "git branch <branch-name>" e selezionalo con "git checkout <branch-name>"', "it_IT": 'Crea un nuovo ramo con "git branch <branch-name>" e selezionalo con "git checkout <branch-name>"',
@ -1183,9 +1183,9 @@ exports.level = {
"rẽ nhánh sớm, rẽ nhánh thường xuyên", "rẽ nhánh sớm, rẽ nhánh thường xuyên",
"```", "```",
"", "",
"Bởi vì chẳng tốn bao nhiêu bộ nhớ cho việc rẽ nhánh cả, và nó dễ dàng phân chia công việc hơn là có một cái nhánh to tổ chảng.", "Bởi vì chẳng tốn bao nhiêu bộ nhớ cho việc rẽ nhánh cả và nó dễ dàng phân chia công việc hơn là có một cái nhánh to tổ chảng.",
"", "",
"Khi bạn trộn lẫn commit và nhánh, bạn sẽ thấy chúng kết hợp với nhau thế nào. Còn bây giờ, đơn giản hãy nhớ nhánh cơ bản muốn nói \"Tôi muốn thành quả trong commit này và tất cả cha ông của nó\"" "Khi bạn trộn lẫn commit và nhánh, bạn sẽ thấy chúng kết hợp với nhau thế nào. Hãy nhớ về cơ bản nhánh muốn nói \"Tôi muốn thành quả trong commit này và tất cả cha ông của nó\""
] ]
} }
}, },
@ -1208,7 +1208,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Nào cùng thử thêm nội dung vào nhánh mới này nào. Hãy bấm nút bên dưới" "Nào cùng thử thêm nội dung vào nhánh mới này nào. Hãy bấm nút bên dưới."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Ồ không! Nhánh `main` đã di chuyển nhưng nhánh `newImage` thì không! Đó là do ta không \"nằm trên\" nhánh mới, đó là tại sao dấu hoa thị (*) nằm trên nhánh `main`." "Ồ không! Nhánh `main` đã di chuyển nhưng nhánh `newImage` thì không! Đó là do ta không \"nằm trên\" nhánh mới, đó là tại sao dấu hoa thị (*) nằm trên nhánh `main`."
@ -1230,12 +1230,24 @@ exports.level = {
"Lệnh này sẽ chuyển ta sang nhánh mới trước khi commit." "Lệnh này sẽ chuyển ta sang nhánh mới trước khi commit."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Đó! Thay đổi của ta đã được lưu sang nhánh mới" "Đó! Thay đổi của ta đã được lưu sang nhánh mới."
], ],
"command": "git checkout newImage; git commit", "command": "git checkout newImage; git commit",
"beforeCommand": "git branch newImage" "beforeCommand": "git branch newImage"
} }
}, },
{
"type": "ModalAlert",
"options": {
"markdowns": [
"*Note: Ở phiên bản Git 2.23, một câu lệnh mới được giới thiệu mang tên `git switch`, mục đích là để thay thế cho lệnh `git checkout`, ",
"vì lệnh cũ có quá nhiều tham số, mỗi tham số truyền vào sẽ thực hiện nhiều thứ khác nhau. Bài học này vẫn sẽ sử dụng ",
"`checkout` thay vì `switch`, vì lệnh `switch` hiện vẫn đang trong giai đoạn thử nghiệm và cú pháp có thể thay đổi trong tương lai. ",
"Mặc dù vậy, bạn vẫn có thể thử dùng câu lệnh `switch` ở ứng dụng này, và ",
"<a href=\"https://git-scm.com/docs/git-switch\" target=\"_blank\">tìm hiểu thêm tại đây</a>.* "
]
}
},
{ {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {

View file

@ -653,13 +653,13 @@ exports.level = {
"options": { "options": {
"markdowns": [ "markdowns": [
"## Git Commits", "## Git Commits",
"Một commit trong một git repository(kho chứa) lưu trữ một ảnh chụp của tất cả các file trong thư mục của bạn. Như kiểu copy và paste cõ bự, thậm chí còn tốt hơn thế!", "Một commit trong một Git repository (kho chứa) lưu trữ một ảnh chụp của tất cả các file trong thư mục của bạn. Như kiểu copy và paste c bự, thậm chí còn tốt hơn thế!",
"", "",
"Thế nhưng Git muốn giữ cho các commit nhẹ hết mức có thể, cho nên git không copy tất cả thư mục một cách mù quáng mỗi khi bạn commit. Nó có thể(khi khả dĩ) nén commit như một tập hợp các thay đổi, hay là một \"bản so sánh\", giũa một phiên bản kho chứa git với phiên bản tiếp theo.", "Thế nhưng Git muốn giữ cho các commit nhẹ hết mức có thể, cho nên Git không copy tất cả thư mục một cách mù quáng mỗi khi bạn commit. Nó có thể (khi khả dĩ) nén commit như một tập hợp các thay đổi, hay là một \"bản so sánh\", giữa một phiên bản kho chứa Git với phiên bản tiếp theo.",
"", "",
"Đồng thời Git cũng lưu trữ lịch sử commit nào được tạo ra lúc nào. Đó là tại sao hầu hết các commit có commit tổ tiên phía trên nó -- chúng tôi đã hình tượng hóa mối quan hệ này bằng các mũi tên. Trong cộng tác nhóm thì việc gìn giữ lịch sử là rất có ích!", "Đồng thời Git cũng lưu trữ lịch sử commit nào được tạo ra lúc nào. Đó là tại sao hầu hết các commit có commit tổ tiên phía trên nó -- chúng tôi đã hình tượng hóa mối quan hệ này bằng các mũi tên. Trong cộng tác nhóm thì việc gìn giữ lịch sử là rất có ích!",
"", "",
"Có vẻ là hơi nhiều lý thuyết rồi, bây giờ bạn chỉ cần hiu các commit là các lát cắt của dự án. Các commit rất nhẹ nên việc chuyển qua lại giữa chúng thì nhanh vô cùng!" "Có vẻ là hơi nhiều lý thuyết rồi, bây giờ bạn chỉ cần hiu các commit là các lát cắt của dự án. Các commit rất nhẹ nên việc chuyển qua lại giữa chúng thì nhanh vô cùng!"
] ]
} }
}, },
@ -667,12 +667,12 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Thử thực hành chút nào. Ở bên phải chúng ta có mô tả một kho git (nhỏ). Hiện tại đang có 2 commit, một là commit khởi nguyên `C0`, và một commit sau đó `C1` có thể đã có một vài thay đổi.", "Thử thực hành chút nào. Ở bên phải chúng ta có mô tả một kho Git (nhỏ). Hiện tại đang có 2 commit, một là commit khởi nguyên `C0`, và một commit sau đó `C1` có thể đã có một vài thay đổi.",
"", "",
"Bấm nút bên dưới để tạo một commit mới" "Bấm nút bên dưới để tạo một commit mới."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Đúng rồi! Tuyệt vời. Bạn vừa tạo thay đổi cho kho chứa và lưu vào commit. Cái commit bạn vừa tạo nó có cha, là `C1` đấy, là commit mà nó được tạo ra từ đó." "Đúng rồi! Tuyệt vời. Bạn vừa tạo thay đổi cho kho chứa và lưu vào commit. Cái commit bạn vừa tạo nó có cha, là `C1` đấy, có thể hiểu commit vừa được tạo dựa trên commit cũ hơn là C1."
], ],
"command": "git commit", "command": "git commit",
"beforeCommand": "" "beforeCommand": ""
@ -682,7 +682,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Nào bây giờ thì thử tự làm bài tập nào! Sau khi đóng cửa sổ này, tạo ra 2 commit để hoàn thành cấp độ" "Nào bây giờ thì thử tự làm bài tập nào! Sau khi đóng cửa sổ này, tạo ra 2 commit để hoàn thành cấp độ."
] ]
} }
} }

View file

@ -37,7 +37,7 @@ exports.level = {
"ko": "말씀드린 순서대로 커밋해주세요 (bugFix에 먼저 커밋하고 main에 커밋)", "ko": "말씀드린 순서대로 커밋해주세요 (bugFix에 먼저 커밋하고 main에 커밋)",
"ru_RU": "Не забудь делать коммиты в правильном порядке (сначала bugFix, потом main)", "ru_RU": "Не забудь делать коммиты в правильном порядке (сначала bugFix, потом main)",
"uk": "Не забудь робити коміти в правильному порядку (спочатку bugFix, а вже потім main)", "uk": "Не забудь робити коміти в правильному порядку (спочатку bugFix, а вже потім main)",
"vi": "Nhớ là commit theo đúng thứ tự(bugFix trước main)", "vi": "Nhớ là commit theo đúng thứ tự (bugFix trước main)",
"sl_SI": 'Zapomni si, da je potrebno commitati v pravilnem vrstnem redu (bugfix pred main)', "sl_SI": 'Zapomni si, da je potrebno commitati v pravilnem vrstnem redu (bugfix pred main)',
"pl": "Pamiętaj, aby commitować w określonej kolejności (bugFix przed main)", "pl": "Pamiętaj, aby commitować w określonej kolejności (bugFix przed main)",
"it_IT": "it_IT":
@ -1026,7 +1026,7 @@ exports.level = {
"", "",
"Cách đầu tiên để hợp nhất thành quả cần xem xét đến là lệnh `git merge`. Merge trong Git là tạo ra một commit đặc biệt mà có 2 người cha độc nhất. Một commit mà có 2 cha căn bản nghĩa là \"Tôi muốn có thành quả của ông này và ông kia nữa, *và* tất cả ông cha của họ.\"", "Cách đầu tiên để hợp nhất thành quả cần xem xét đến là lệnh `git merge`. Merge trong Git là tạo ra một commit đặc biệt mà có 2 người cha độc nhất. Một commit mà có 2 cha căn bản nghĩa là \"Tôi muốn có thành quả của ông này và ông kia nữa, *và* tất cả ông cha của họ.\"",
"", "",
"Trực quan thì dễ hiểu hơn, sang trang tiếp theo nào" "Trực quan thì dễ hiểu hơn, sang trang tiếp theo nào."
] ]
} }
}, },
@ -1043,7 +1043,7 @@ exports.level = {
"", "",
"Đồng thời, bạn thấy màu commit thay đổi chứ? Để bạn dễ học hơn, tôi đã phối hợp một số bảng màu. Mỗi nhánh có một màu duy nhất. Mỗi commit mang màu pha trộn của tất cả nhánh chứa nó.", "Đồng thời, bạn thấy màu commit thay đổi chứ? Để bạn dễ học hơn, tôi đã phối hợp một số bảng màu. Mỗi nhánh có một màu duy nhất. Mỗi commit mang màu pha trộn của tất cả nhánh chứa nó.",
"", "",
"Vì vậy, ở đây chúng ta thấy rằng màu nhánh `main` được pha trộn vào tất cả các commit, nhưng màu` bugFix` thì không. Hãy sửa nó nào ..." "Vì vậy, ở đây chúng ta thấy rằng màu nhánh `main` được pha trộn vào tất cả các commit, nhưng màu `bugFix` thì không. Hãy sửa nó nào..."
], ],
"command": "git merge bugFix", "command": "git merge bugFix",
"beforeCommand": "git checkout -b bugFix; git commit; git checkout main; git commit" "beforeCommand": "git checkout -b bugFix; git commit; git checkout main; git commit"
@ -1056,7 +1056,7 @@ exports.level = {
"Hãy gộp nhánh `main` vào `bugFix` nào:" "Hãy gộp nhánh `main` vào `bugFix` nào:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Vì `bugFix` là bậc cha ông của `main`, git chẳng phải làm gì cả; nó đơn giản chỉ chuyển `bugFix` vào commit mà `main` đang trỏ tới.", "Vì `bugFix` là bậc cha ông của `main`, Git chẳng phải làm gì cả; nó đơn giản chỉ chuyển `bugFix` vào commit mà `main` đang trỏ tới.",
"", "",
"Giờ thì tất cả commit đã có cùng màu, nghĩa là mỗi nhánh đã chứa tất cả thành quả trong kho! Ồ hố!" "Giờ thì tất cả commit đã có cùng màu, nghĩa là mỗi nhánh đã chứa tất cả thành quả trong kho! Ồ hố!"
], ],
@ -1077,7 +1077,7 @@ exports.level = {
"* Commit một lần nữa", "* Commit một lần nữa",
"* Gộp nhánh `bugFix` vào `main` với `git merge`", "* Gộp nhánh `bugFix` vào `main` với `git merge`",
"", "",
"*Nhớ rằng, bạn luôn luôn có thể bật lại hội thoại này với lệnh \"objective\"!*" "*Nhớ rằng, bạn luôn luôn có thể bật lại hộp thoại này với lệnh \"objective\"!*"
] ]
} }
} }

View file

@ -994,9 +994,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Rebase", "## Git Rebase",
"", "",
"Cách thứ 2 để kết hợp thành của của 2 nhánh là *rebase.* Rebase về căn bản là chọn một loạt các commit, \"sao chép\" chúng, và ném chúng sang chỗ khác.", "Cách thứ 2 để kết hợp thành quả của 2 nhánh là *rebase.* Rebase về căn bản là chọn một loạt các commit, \"sao chép\" chúng, và ném chúng sang chỗ khác.",
"", "",
"Nghe có vẻ phức tạp, lợi thế của rebase là có thể tạo ra cây lịch sử thẳng tuột. Ljch sử commit nhìn sẽ gọn gàng hơn nhiều.", "Nghe có vẻ phức tạp, lợi thế của rebase là có thể tạo ra cây lịch sử thẳng tuột. Lch sử commit nhìn sẽ gọn gàng hơn nhiều.",
"", "",
"Xem nó hoạt động thế nào nào..." "Xem nó hoạt động thế nào nào..."
] ]
@ -1008,9 +1008,9 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Giờ ta lại có 2 nhánh; để ý rằng nhánh bugFix đang được chọn (thấy dấu hoa thị chứ?)", "Giờ ta lại có 2 nhánh; để ý rằng nhánh bugFix đang được chọn (thấy dấu hoa thị chứ?)",
"", "",
"Ta muốn chuyển bugFix trực tiếp sang main. Theo cách đó thì các chức năng nhìn có vẻ được phát triển tuần tự, trong khi thực tế chúng được phát triển song song.", "Ta muốn chuyển công việc từ bugFix trực tiếp sang main. Theo cách đó thì các chức năng nhìn có vẻ được phát triển tuần tự, trong khi thực tế chúng được phát triển song song.",
"", "",
"Dùng lệnh `git rebase` để thử nào" "Dùng lệnh `git rebase` để thử nào."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Tuyệt vời! Giờ thành quả của nhánh bugFix nằm ngay trên main và ta có các commit nằm thẳng tuột.", "Tuyệt vời! Giờ thành quả của nhánh bugFix nằm ngay trên main và ta có các commit nằm thẳng tuột.",
@ -1030,7 +1030,7 @@ exports.level = {
"Giờ thì ta đã chuyển sang nhánh `main`. Tiếp tục dán nó vào `bugFix` nào..." "Giờ thì ta đã chuyển sang nhánh `main`. Tiếp tục dán nó vào `bugFix` nào..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Đó! Bởi vì `main` là cha ông của `bugFix`, git đơn giản chuyển tham chiếu của nhánh `main` tiến lên." "Đó! Bởi vì `main` là cha ông của `bugFix`, Git đơn giản chuyển tham chiếu của nhánh `main` tiến lên."
], ],
"command": "git rebase bugFix", "command": "git rebase bugFix",
"beforeCommand": "git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main" "beforeCommand": "git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"

View file

@ -24,7 +24,7 @@ exports.level = {
"ru_RU": "Git describe", "ru_RU": "Git describe",
"ko": "Git describe(묘사)", "ko": "Git describe(묘사)",
"uk": "Git Describe", "uk": "Git Describe",
"vi": "Git Describe(mô tả)", "vi": "Git Describe (mô tả)",
"sl_SI": "Git Describe", "sl_SI": "Git Describe",
"it_IT": "Git Describe", "it_IT": "Git Describe",
"pl": "Git describe" "pl": "Git describe"
@ -880,9 +880,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Mô tả của Git", "### Mô tả của Git",
"", "",
"Bởi gì thẻ đóng vai trò như là \"mỏ neo\" trên cây lịch sử rất tốt rồi, git cũng có lệnh để *mô tả* tương quan của bạn dến vị trí \"mỏ neo\" (thẻ) gần nhất. Và đó là `git describe`!", "Bởi gì thẻ đóng vai trò như là \"mỏ neo\" trên cây lịch sử rất tốt rồi, Git cũng có lệnh để *mô tả* tương quan của bạn đến vị trí \"mỏ neo\" (thẻ) gần nhất. Và đó là `git describe`!",
"", "",
"`git descripe` có thể giúp bạn định hướng sau khi dịch chuyển qua lại nhiều lần trên cây lịch sử; đặc biệt là sau khi sử dụng `git bisect` (công cụ tìm kiếm lỗi của git) hoặc khi sử dụng máy của đồng nghiệp mới đi nghỉ mát về." "`git describe` có thể giúp bạn định hướng sau khi dịch chuyển qua lại nhiều lần trên cây lịch sử; đặc biệt là sau khi sử dụng `git bisect` (công cụ tìm kiếm lỗi của Git) hoặc khi sử dụng máy của đồng nghiệp mới đi nghỉ mát về."
] ]
} }
}, },
@ -894,7 +894,7 @@ exports.level = {
"", "",
"`git describe <thamchiếu>`", "`git describe <thamchiếu>`",
"", "",
"Trong đó `<thamchiếu>` là bất kỳ thứ gì mà git có thể dùng để xác định commit. Nếu bạn không chỉ định tham chiếu, git sẽ dùng vị trí hiện tại của bạn (`HEAD`).", "Trong đó `<thamchiếu>` là bất kỳ thứ gì mà Git có thể dùng để xác định commit. Nếu bạn không chỉ định tham chiếu, Git sẽ dùng vị trí hiện tại của bạn (`HEAD`).",
"", "",
"Đầu ra của câu lệnh sẽ như sau:", "Đầu ra của câu lệnh sẽ như sau:",
"", "",

View file

@ -47,7 +47,7 @@ exports.level = {
"zh_TW": "記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助", "zh_TW": "記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助",
"ru_RU": "Не забывай, что интерактивный rebase и cherry-pick это твои друзья!", "ru_RU": "Не забывай, что интерактивный rebase и cherry-pick это твои друзья!",
"uk": "Не забувай, що інтерактивний rebase та cherry-pick -- це твої друзі!", "uk": "Не забувай, що інтерактивний rebase та cherry-pick -- це твої друзі!",
"vi": "Hãy nhớ 2 anh bạn tương tác rebase và cherry-pick!", "vi": "Hãy nhớ 2 anh bạn tương tác rebase và cherry-pick",
"sl_SI": "Pomni, interaktivni rebase ali cherry-pick sta tu tvoja prijatelja.", "sl_SI": "Pomni, interaktivni rebase ali cherry-pick sta tu tvoja prijatelja.",
"it_IT": "Ricorda, rebase interattivo o cherry-pick sono tuoi amici", "it_IT": "Ricorda, rebase interattivo o cherry-pick sono tuoi amici",
"pl": "Pamiętaj, że znasz już interaktywny rebase oraz cherry-pick", "pl": "Pamiętaj, że znasz już interaktywny rebase oraz cherry-pick",
@ -605,13 +605,13 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## Commit xếp chồng tại địa phương", "## Commit xếp chồng cục bộ",
"", "",
"Có tình huống thế này thường hay xảy ra trong quá trình phát triển: Tôi dang cố dò lỗi nhưng mà nó lại khá là trúc trắc. Để hỗ trợ cho việc này, thêm vào vài dòng lệnh gỡ lỗi và lệnh in.", "Có tình huống thế này thường hay xảy ra trong quá trình phát triển: Tôi đang cố dò lỗi nhưng mà nó lại khá khó tìm. Để hỗ trợ cho việc này, tôi thêm vào vài dòng lệnh gỡ lỗi và lệnh in.",
"", "",
"Mấy lệnh gỡ lỗi và in này nằm yên trong commit của chúng. Cuối cùng thì tôi cũng tìm ra lỗi, gỡ xong, ngon rồi!", "Mấy lệnh gỡ lỗi và in này nằm yên trong commit của chúng. Cuối cùng thì tôi cũng tìm ra lỗi, gỡ xong, ngon rồi!",
"", "",
"Bây giờ thì lại phải đưa `bugFix` trở về nhánh `main`. Nếu mà đơn giản dùng fast-forwarded lên `main`, thì `main` lại có tất cả các lệnh gỡ lỗi kia(chẳng muốn chút nào). Phải có cách khác chứ nhỉ..." "Bây giờ thì lại phải đưa `bugFix` trở về nhánh `main`. Nếu mà đơn giản dùng fast-forwarded lên `main`, thì `main` lại có tất cả các lệnh gỡ lỗi kia, chẳng muốn chút nào. Phải có cách khác chứ nhỉ..."
] ]
} }
}, },
@ -619,7 +619,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Ta cần phải bảo git chỉ sao chép 1 commit thôi. Điều này giống với cấp độ trước về điều chỉnh vị trí -- ta có thể dùng các câu lệnh tương tự:", "Ta cần phải bảo Git chỉ sao chép 1 commit thôi. Điều này giống với cấp độ trước về điều chỉnh vị trí -- ta có thể dùng các câu lệnh tương tự:",
"", "",
"* `git rebase -i`", "* `git rebase -i`",
"* `git cherry-pick`", "* `git cherry-pick`",

View file

@ -548,7 +548,7 @@ exports.level = {
"", "",
"Có một tình huống xảy ra khá thường xuyên. Bạn có vài thay đổi trên (`newImage`) và một vài thay đổi khác trên (`caption`) và chúng lại liên quan đến nhau, nên chúng nằm chồng lên nhau trong kho của bạn (một lại nối một).", "Có một tình huống xảy ra khá thường xuyên. Bạn có vài thay đổi trên (`newImage`) và một vài thay đổi khác trên (`caption`) và chúng lại liên quan đến nhau, nên chúng nằm chồng lên nhau trong kho của bạn (một lại nối một).",
"", "",
"Tréo ngoe là bạn lại phải điều chỉnh một chút ở commit trước. Giả sử như tay thiết kết muốn ta đổi chiều của `newImage` một chút, mặc dù commit ấy đã xưa lắm rồi!!" "Tréo ngoe là bạn lại phải điều chỉnh một chút ở commit trước. Giả sử như tay thiết kế muốn ta đổi chiều của `newImage` một chút, mặc dù commit ấy đã xưa lắm rồi!!"
] ]
} }
}, },
@ -564,7 +564,7 @@ exports.level = {
"* Cuối cùng, ta sẽ chuyển `main` tới phần đã cập nhật để hoàn thành cấp độ (dùng cách nào tùy bạn)", "* Cuối cùng, ta sẽ chuyển `main` tới phần đã cập nhật để hoàn thành cấp độ (dùng cách nào tùy bạn)",
"", "",
"Có nhiều cách để hoàn thành mục tiêu (Tôi thấy bạn hấp háy sang cherry-pick rồi đấy), rồi ta sẽ thấy chúng nhiều hơn, nhưng giờ hãy cứ tập trung vào kỹ thuật này đã.", "Có nhiều cách để hoàn thành mục tiêu (Tôi thấy bạn hấp háy sang cherry-pick rồi đấy), rồi ta sẽ thấy chúng nhiều hơn, nhưng giờ hãy cứ tập trung vào kỹ thuật này đã.",
"Sau cùng thì, để ý các dấu nháy đơn(') chứ?-- vì ta đã chuyển commit 2 lần, nên chúng có thêm một dấu nháy đơn. Và một dấu nữa cho commit mà ta đã sửa đổi, thế là ta có trạng thái cuối cùng của cây lịch sử ", "Sau cùng thì, hãy để ý các dấu nháy đơn (') -- Vì ta đã chuyển commit 2 lần, nên chúng có thêm một dấu nháy đơn và một dấu nữa cho commit mà ta đã sửa đổi, thế là ta có trạng thái cuối cùng của cây lịch sử ",
"", "",
"Nói cách khác, khi tôi so sánh kết quả, tôi chỉ so sánh cấu trúc của cây lịch sử. Sự khác biệt về số lượng `'` không được bao gồm trong so sánh. Miễn là cấu trúc nhánh `main` của bạn giống với cấu trúc đích, tôi sẽ vẫn để bạn qua bài." "Nói cách khác, khi tôi so sánh kết quả, tôi chỉ so sánh cấu trúc của cây lịch sử. Sự khác biệt về số lượng `'` không được bao gồm trong so sánh. Miễn là cấu trúc nhánh `main` của bạn giống với cấu trúc đích, tôi sẽ vẫn để bạn qua bài."
] ]

View file

@ -664,9 +664,9 @@ exports.level = {
"", "",
"*Nếu bạn vẫn chưa hoàn thành Tung hứng Commit #1 (cấp độ trước), hãy làm nó trước khi tiếp tục*", "*Nếu bạn vẫn chưa hoàn thành Tung hứng Commit #1 (cấp độ trước), hãy làm nó trước khi tiếp tục*",
"", "",
"Như bạn đã thấy ở cấp độ trước, ta dùng `rebase -i` để sắp xếp lại các commit. Một khi commit mà ta muốn sửa đã ở trên cùng, ta có thể dễ dàng --chỉnh sửa(amend) nó và sau đó sắp xếp lại trật tự lúc trước.", "Như bạn đã thấy ở cấp độ trước, ta dùng `rebase -i` để sắp xếp lại các commit. Một khi commit mà ta muốn sửa đã ở trên cùng, ta có thể dễ dàng --chỉnh sửa (amend) nó và sau đó sắp xếp lại trật tự lúc trước.",
"", "",
"Nhưng mà vẫn tồn tại vấn đề khi mà ta sắp xếp quá nhiều, điều này có thể dẫn đến xung đột khi rebase. Thử dùng cách khác với `git cherry-pick` nào" "Nhưng mà vẫn tồn tại vấn đề khi mà ta sắp xếp quá nhiều, điều này có thể dẫn đến xung đột khi rebase. Thử dùng cách khác với `git cherry-pick` nào."
] ]
} }
}, },
@ -691,7 +691,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Vậy thì ở cấp độ này, hãy làm hoàn thành mục tiêu tương tự là chỉnh sửa `C2` một lần nhưng hãy tránh dùng `rebase -i`. Tự tìm cách đi nhé! :D", "Vậy thì ở cấp độ này, hãy làm hoàn thành mục tiêu tương tự là chỉnh sửa `C2` một lần nhưng hãy tránh dùng `rebase -i`. Tự tìm cách đi nhé! :D",
"", "",
"Nhớ rằng, số lượng dấu nháy dơn (') trên commit không quan trọng, quan trọng là mối tương liên các tham chiếu. Nói cách khác, kể cả bất cứ commit nào của bạn có thêm một đấu(') tôi vẫn công nhận đáp án của bạn" "Nhớ rằng, số lượng dấu nháy đơn (') trên commit không quan trọng, quan trọng là sự khác biệt tương đối. Nói cách khác, kể cả bất cứ commit nào của bạn có thêm một đấu(') tôi vẫn công nhận đáp án của bạn"
] ]
} }
} }

View file

@ -780,7 +780,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Tag trong Git", "## Tag trong Git",
"", "",
"Qua các bài học trước, bạn đã biết được rằng rất dễ dàng để di chuyển qua lại giữa các nhánh và chúng thường tham chiếu đến các commit khác nhau trong quá trình ta làm việc trên chúng. Nhánh thường dễ biết đổi, thường chỉ là tạm thời và chúng luôn như vậy.", "Qua các bài học trước, bạn đã biết được rằng rất dễ dàng để di chuyển qua lại giữa các nhánh và chúng thường tham chiếu đến các commit khác nhau trong quá trình ta làm việc trên chúng. Nhánh dễ dàng chỉnh sửa, thường tạm thời và luôn thay đổi.",
"", "",
"Nếu như vậy thì bạn có thể sẽ thắc mắc liệu có cách nào để đánh dấu *vĩnh viễn* một thời điểm nào đó trong lịch sử làm việc không? Khi mà dự án càng ngày càng mở rộng và merge thì diễn ra liên tục, vậy thì có cách nào để đánh dấu những commit đó một cách cố định hơn nhánh không?", "Nếu như vậy thì bạn có thể sẽ thắc mắc liệu có cách nào để đánh dấu *vĩnh viễn* một thời điểm nào đó trong lịch sử làm việc không? Khi mà dự án càng ngày càng mở rộng và merge thì diễn ra liên tục, vậy thì có cách nào để đánh dấu những commit đó một cách cố định hơn nhánh không?",
"" ""
@ -791,9 +791,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Tất nhiên là có chứ! Git có các tag(thẻ) để hỗ trợ vấn đề này -- chúng (bằng cách nào đó) đánh dấu vĩnh viễn một commit cụ thể nào đó như một \"cột mốc\" mà sau đó bạn có thể tham chiếu đến như với nhánh.", "Tất nhiên là có chứ! Git có các tag (thẻ) để hỗ trợ vấn đề này -- chúng (một phần chứ không hoàn toàn) đánh dấu vĩnh viễn một số commit nhất định là \"cột mốc\" mà sau này bạn có thể tham chiếu đến như với nhánh.",
"", "",
"Quan trọng hơn là, khi ta commit thì chúng không hề bị di chuyển. Bạn không thể \"check out\" một tag rồi làm việc trên đó -- tag giống như là mỏ neo để chỉ định một điểm cụ thể nào dó trên cây lịch sử.", "Quan trọng hơn là, khi ta commit thì chúng không hề bị di chuyển. Bạn không thể \"check out\" một tag rồi làm việc trên đó -- tag giống như là mỏ neo để chỉ định một điểm cụ thể nào đó trên cây lịch sử.",
"", "",
"Cùng xem tag thực tế là như thế nào nào." "Cùng xem tag thực tế là như thế nào nào."
] ]
@ -816,7 +816,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Trong cấp độ này hãy tạo ra một thẻ tại vị trí chỉ định và chuyển sang `v1`. Để ý rằng bạn sẽ chuyến sang trạng thái tách biệt `HEAD` -- bởi vì bạn không thể tham chiếu đến thẻ `v1`.", "Trong cấp độ này hãy tạo ra một thẻ tại vị trí chỉ định và chuyển sang `v1`. Để ý rằng bạn sẽ chuyn sang trạng thái tách biệt `HEAD` -- bởi vì bạn không thể tham chiếu đến thẻ `v1`.",
"", "",
"Sang cấp độ tới ta sẽ xem xét một vài cách hay ho để dùng thẻ." "Sang cấp độ tới ta sẽ xem xét một vài cách hay ho để dùng thẻ."
] ]

View file

@ -849,11 +849,11 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## Mang đi kéo về", "## Di Chuyển Commit",
"", "",
"Cho đến giờ thì ta đã nắm được cơ bản về git -- commit, rẽ nhánh, và dịch chuyển qua lại trên cây mã nguồn. Chừng ấy khái niệm là đã đủ để tác động đến 90% sức mạnh của kho chứa git và các chức nawmg cần thiết cho nhà phát triển phần mềm.", "Cho đến giờ thì ta đã nắm được cơ bản về Git -- commit, rẽ nhánh, và dịch chuyển qua lại trên cây mã nguồn. Chừng ấy khái niệm là đã đủ để tận dụng đến 90% sức mạnh của Git và đáp ứng đủ nhu cầu chính cho nhà phát triển phần mềm.",
"", "",
"Tuy nhiên 10% còn lại thì lại khá hữu ích trong các quy trình làm việc phức tạp (hoặc khi bạn vướng phải tình huống khó khăn). The next concept we're going to cover is \"chỉnh lý các bản ghi\" -- đó là cách để nhà phát triển nói rằng\"Tôi muốn lấy bản ghi ở đây và cả bản ghi ở đó\" một cách chính xác, linh hoạt và sống động.", "Tuy nhiên 10% còn lại thì lại khá hữu ích trong các quy trình làm việc phức tạp (hoặc khi bạn vướng phải tình huống khó khăn). Khái niệm tiếp theo chúng ta sẽ đề cập đến là \"di chuyển commit\" -- đó là cách để nhà phát triển nói rằng \"Tôi muốn lấy bản ghi ở đây và cả bản ghi ở đó\" một cách chính xác, trôi chảy và linh hoạt.",
"", "",
"Nghe thì có vẻ phức tạp, nhưng thực ra khái niệm này khá đơn giản." "Nghe thì có vẻ phức tạp, nhưng thực ra khái niệm này khá đơn giản."
] ]
@ -865,7 +865,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Cherry-pick", "## Git Cherry-pick",
"", "",
"Lệnh đầu tiên của loạt bài này là `git cherry-pick`, dạng lệnh là::", "Lệnh đầu tiên của loạt bài này là `git cherry-pick`, dạng lệnh là:",
"", "",
"* `git cherry-pick <Commit1> <Commit2> <...>`", "* `git cherry-pick <Commit1> <Commit2> <...>`",
"", "",
@ -883,7 +883,7 @@ exports.level = {
"Ở đây ta có một kho chứa mà ta muốn sao chép thành quả công việc từ nhánh `side` sang nhánh `main`. Có thể dùng rebase để làm việc này (kỹ thuật mà ta đã học), nhưng hãy xem thử cherry-pick làm điều này ra sao." "Ở đây ta có một kho chứa mà ta muốn sao chép thành quả công việc từ nhánh `side` sang nhánh `main`. Có thể dùng rebase để làm việc này (kỹ thuật mà ta đã học), nhưng hãy xem thử cherry-pick làm điều này ra sao."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Thế thôi! Chúng ta chỉ cần các commit `C2` và` C4`, vì vậy Git sẽ lấy chúng và đặt chúng dưới nhánh hiện tại. Thật đơn giản!" "Thế thôi! Chúng ta chỉ cần các commit `C2` và `C4`, vì vậy Git sẽ lấy chúng và đặt chúng dưới nhánh hiện tại. Thật đơn giản!"
], ],
"command": "git cherry-pick C2 C4", "command": "git cherry-pick C2 C4",
"beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;" "beforeCommand": "git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"

View file

@ -1140,7 +1140,7 @@ exports.level = {
"", "",
"Trước khi học thêm vài chức năng nâng cao trong Git, ta cần phải biết cách dịch chuyển qua lại các commit có trong kho chứa.", "Trước khi học thêm vài chức năng nâng cao trong Git, ta cần phải biết cách dịch chuyển qua lại các commit có trong kho chứa.",
"", "",
"Một khi bạn đã thành thao với chuyển dịch, khả năng sử dụng các lệnh git của bạn đã được nâng cao!", "Một khi bạn đã thành thạo với chuyển dịch, khả năng sử dụng các lệnh Git của bạn đã được nâng cao!",
"", "",
"", "",
"", "",
@ -1155,11 +1155,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## HEAD", "## HEAD",
"", "",
"Đầu tiên hãy bàn về 'HEAD'. HEAD là cái tên biểu tượng cho commit iện tại đang được trỏ đến -- về căn bản nó là commit mà bạn đang làm việc.", "Đầu tiên hãy bàn về 'HEAD'. HEAD là cái tên biểu tượng cho commit hiện tại đang được trỏ đến -- về căn bản nó là commit mà bạn đang làm việc.",
"", "",
"HEAD luôn luôn trỏ đến commit gần nhất được phản ánh trong cây làm việc. Hầu hết các lệnh git mà làm thay đổi nội dung cây làm việc thường bắt đầu với HEAD.", "HEAD luôn luôn trỏ đến commit gần nhất được phản ánh trong cây làm việc. Hầu hết các lệnh Git mà làm thay đổi nội dung cây làm việc thường bắt đầu với HEAD.",
"", "",
"Bình thường HEAD thì trỏ tới tên nhánh (ví dụ bugFix). Khi bạn commit, thì trạng thái của bugFix được thay đổi và thay đổi này được trông thấy thông qua HEAD." "Bình thường HEAD trỏ tới tên nhánh (ví dụ bugFix). Khi bạn commit, trạng thái của bugFix được thay đổi và thay đổi này được trông thấy thông qua HEAD."
] ]
} }
}, },
@ -1167,7 +1167,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Xem thử thực tế nào. Ở đây ta sẽ bộc lộ HEAD trước và sau khi commit." "Xem thử thực tế nào. Ở đây ta sẽ làm rõ HEAD trước và sau khi commit."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Thấy chứ? HEAD đã ẩn dưới nhánh `main` suốt." "Thấy chứ? HEAD đã ẩn dưới nhánh `main` suốt."
@ -1182,7 +1182,7 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"### Tháo HEAD", "### Tháo HEAD",
"", "",
"Tháo HEAD đơng giản nghĩa là dán nó vào một commit thay vì một nhánh. Lúc trước thì nó trông như thế này:", "Tháo HEAD đơn giản nghĩa là dán nó vào một commit thay vì một nhánh. Lúc trước thì nó trông như thế này:",
"", "",
"HEAD -> main -> C1", "HEAD -> main -> C1",
"" ""
@ -1200,7 +1200,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Để hoàn thành cấp độ này, hãy tháo HEAD khỏi `bugFix` thay vì đó hãy dán nó vào commit.", "Để hoàn thành cấp độ này, hãy tháo HEAD khỏi `bugFix` dán nó vào commit.",
"", "",
"Chỉ rõ commit bằng mã băm (hash) của nó. Mã băm của mỗi commit nằm trong trong vòng tròn biểu thị commit đó." "Chỉ rõ commit bằng mã băm (hash) của nó. Mã băm của mỗi commit nằm trong trong vòng tròn biểu thị commit đó."
] ]

View file

@ -41,7 +41,7 @@ exports.level = {
"ru_RU": "Введение в интерактивный Rebase", "ru_RU": "Введение в интерактивный Rebase",
"ko": "인터랙티브 리베이스 소개", "ko": "인터랙티브 리베이스 소개",
"uk": "Знайомство з інтерактивним rebase", "uk": "Знайомство з інтерактивним rebase",
"vi": "Giới thiệu về tương tác rebase", "vi": "Giới thiệu về rebase tương tác",
"sl_SI": "Interaktivni uvod v Rebase", "sl_SI": "Interaktivni uvod v Rebase",
"it_IT": "Introduzione al rebase interattivo", "it_IT": "Introduzione al rebase interattivo",
"pl": "Wprowadzenie do interaktywnego rebase'a", "pl": "Wprowadzenie do interaktywnego rebase'a",
@ -971,7 +971,7 @@ exports.level = {
"", "",
"Khi bạn biết rõ mình muốn những commit nào (và mã băm tương ứng của chúng) thì Git cherry-pick là công cụ tuyệt vời -- nó đơn giản đến bất ngờ.", "Khi bạn biết rõ mình muốn những commit nào (và mã băm tương ứng của chúng) thì Git cherry-pick là công cụ tuyệt vời -- nó đơn giản đến bất ngờ.",
"", "",
"Nhưng mà lỡ như bạn không biết mình cần commit nào thì sao? May mà git cũng có công cụ cho việc này! Ta có thể dùng rebase tương tác cho việc này -- đó là cách tốt nhất để cân nhắc lựa chọn các commit mà bạn muốn rebase.", "Nhưng mà lỡ như bạn không biết mình cần commit nào thì sao? May mà Git cũng có công cụ cho việc này! Ta có thể dùng rebase tương tác cho việc này -- đó là cách tốt nhất để cân nhắc lựa chọn các commit mà bạn muốn rebase.",
"", "",
"Hãy đi sâu vào chi tiết nào..." "Hãy đi sâu vào chi tiết nào..."
] ]
@ -983,9 +983,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"Rebase tương tác nghĩa là dùng lệnh `rebase` với tùy chọn `-i`.", "Rebase tương tác nghĩa là dùng lệnh `rebase` với tùy chọn `-i`.",
"", "",
"Nếu lệnh của bạn có bao hàm tùy chọn này, git sẽ mở một giao diện người dùng để cho bạn biết những commit nào sẽ được sao chép xuống dưới mục tiêu rebase. Nó cũng đồng thời thể hiện mã băm và thông điệp của commit, điều này là tuyệt vời bởi nhờ đó ta có thể phân biệt được chúng.", "Nếu lệnh của bạn có bao hàm tùy chọn này, Git sẽ mở một giao diện người dùng để cho bạn biết những commit nào sẽ được sao chép xuống dưới mục tiêu rebase. Nó cũng đồng thời thể hiện mã băm và thông điệp của commit, điều này thật tuyệt bởi nhờ đó ta có thể phân biệt được chúng.",
"", "",
"Với git \"thật\", cửa sổ UI (giao diện người dùng) sẽ được mở thông qua một tệp nhờ công cụ chỉnh sửa văn bản như là `vim`. Vì mục đích học tập, tôi đã xây dựng một cửa sổ hội thoại nhỏ mà nó hành xử cũng tương tự như vậy." "Với Git \"thật\", cửa sổ UI (giao diện người dùng) sẽ được mở thông qua một tệp nhờ công cụ chỉnh sửa văn bản như là `vim`. Vì mục đích học tập, tôi đã xây dựng một hộp thoại nhỏ mà nó hành xử cũng tương tự như vậy."
] ]
} }
}, },
@ -993,11 +993,13 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Khi hội thoại tương tác rebase bật lên, bạn có thể làm được 3 điều:", "Khi hộp thoại rebase tương tác bật lên, trong ứng dụng giáo dục của chúng tôi, bạn có khả năng làm hai điều sau:",
"", "",
"* Bạn có thể sắp xếp lại commit một cách đơn giản thông qua UI (bạn có thể làm điều này bằng cách kéo thả trên công cụ của chúng tôi).", "* Bạn có thể sắp xếp lại commit một cách đơn giản thông qua UI (bằng cách kéo thả trên công cụ của chúng tôi).",
"* Bạn có thẻ bỏ qua một vài commit. Điều này được thể hiện qua nút `pick` -- tắt nút `pick` nghĩa là bạn bỏ qua commit đó.", "* Bạn có thể chọn hoặc loại bỏ một vài commit cụ thể. Điều này được thể hiện qua nút `pick` -- tắt nút `pick` nghĩa là bạn loại bỏ commit đó.",
"* Cuối cùng, bạn có thể nén các commit. Đáng tiếc là trình độ của chúng tôi chưa hỗ trợ được chức năng này do vài vấn đề logic, cho nên tôi sẽ bỏ qua phần này. Nói dơn giản thì -- nó cho phép bạn kết hợp các commit.", "",
"*Chú ý rằng, đối với rebase tương tác trong thực tế, bạn có thể làm nhiều thứ hơn như squash (kết hợp) commit, " +
"sửa đổi commit message, thậm chí là chỉnh sửa commit. Tuy nhiên, chúng ta chỉ cần tập trung vào hai thao tác trên.*",
"", "",
"Tuyệt! Cùng xem qua một ví dụ nào." "Tuyệt! Cùng xem qua một ví dụ nào."
] ]
@ -1007,7 +1009,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Khi bạn bấm nút, một cửa sổ tương tác rebase sẽ xuất hiện. Sắp xếp lại một vài commit (hoặc thậm chí bỏ qua một vài cái) và xem thử kết quả!" "Khi bấm nút, một cửa sổ rebase tương tác sẽ xuất hiện. Bạn có thể sắp xếp lại một số commit (hoặc có thể xóa bớt) và xem thử kết quả!"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"BÙÙM! Git sao chép chính xác các commit mà bạn chọn thông qua UI." "BÙÙM! Git sao chép chính xác các commit mà bạn chọn thông qua UI."
@ -1020,7 +1022,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Để hoàn thành cấp độ này, do an interactive rebase and achieve the order shown in the goal visualization. Remember you can always `undo` or `reset` to fix mistakes :D" "Để hoàn thành cấp độ này, thực hiện rebase tương tác sao cho thứ tự commit giống với mục tiêu. Hãy nhớ rằng nếu gặp lỗi bạn luôn có thể hoàn tác hoặc đặt lại :D"
] ]
} }
} }

View file

@ -1100,11 +1100,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Tham chiếu tương đối", "## Tham chiếu tương đối",
"", "",
"Dịch chuyển trong Git bằng cách chỉ định mã băm(hash) của commit cỏ vẻ hơi buồn tẻ. Trong đời thực thì sẽ không có mô tả git trực quan ngay bên cạnh terminal của bạn đâu, nên nếu bạn muốn nhìn mã băm của commit thì phải dùng `git log` thôi.", "Dịch chuyển trong Git bằng cách chỉ định mã băm (hash) của commit cỏ vẻ hơi buồn tẻ. Trong đời thực thì sẽ không có mô tả Git trực quan ngay bên cạnh terminal của bạn đâu, nên nếu bạn muốn nhìn mã băm của commit thì phải dùng `git log` thôi.",
"", "",
"Hơn nữa, mã băm thực tế thường dài hơn rất nhiều. Ví dụ, mã băm của commit được giới thiệu trong phần trước là `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Đọc mà xoắn hết cả lưỡi...", "Hơn nữa, mã băm thực tế thường dài hơn rất nhiều. Ví dụ, mã băm của commit được giới thiệu trong phần trước là `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Đọc mà xoắn hết cả lưỡi...",
"", "",
"Được cái là Git cũng khá thông minh về mã băm. Nó chỉ yêu cầu bạn chỉ định mã băm đủ để xác định commit. Cho nên tôi có thể đơn giản chỉ cần gõ `fed2` thay vì cái chuỗi dài ngoằng phía trên." "Được cái là Git cũng khá thông minh về mã băm. Chỉ cần cung cấp kí tự mã băm đủ để phân biệt với các commit khác. Cho nên tôi có thể đơn giản chỉ cần gõ `fed2` thay vì cái chuỗi dài ngoằng phía trên."
] ]
} }
}, },
@ -1112,14 +1112,14 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Như tôi đã nói, xác định commit bằng mã băm của nó chẳng hề thuận tiện tẹo nào, đó là tại sao Git có những `tham chiếu tương đối`. Chúng rất tuyệt vời!", "Như tôi đã nói, xác định commit bằng mã băm chẳng hề thuận tiện tẹo nào, đó là tại sao Git có những `tham chiếu tương đối`. Chúng rất tuyệt vời!",
"", "",
"Với tham chiếu tương đối, bạn có thể bắt đầu từ những nơi có thể ghi nhớ được (như là nhánh `bugFix` hoặc `HEAD`) và làm việc trên đó.", "Với tham chiếu tương đối, bạn có thể bắt đầu từ những nơi có thể ghi nhớ được (như là nhánh `bugFix` hoặc `HEAD`) và làm việc trên đó.",
"", "",
"Những commits tương đối rất mạnh mẽ, nhưng chúng tôi sẽ chỉ giới thiệu 2 loại đơn giản sau:", "Những commit tương đối (relative commits) rất mạnh mẽ, nhưng chúng tôi sẽ chỉ giới thiệu 2 loại đơn giản sau:",
"", "",
"* Dịch chuyển 1 commit lên trên trong 1 lần với `^`", "* Dịch chuyển lên 1 commit mỗi lần với `^`",
"* Dịch chuyển nhiều commit lên trên trong 1 lần với `~<số>`" "* Dịch chuyển lên nhiều commit mỗi lần với `~<số>`"
] ]
} }
}, },
@ -1136,7 +1136,7 @@ exports.level = {
"Thử nhảy sang commit trước main nào" "Thử nhảy sang commit trước main nào"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"BÙUM! Đã xong. Đơn giản hơn gõ mã băm nhiều" "BÙUM! Đã xong. Đơn giản hơn gõ mã băm nhiều."
], ],
"command": "git checkout main^", "command": "git checkout main^",
"beforeCommand": "git commit" "beforeCommand": "git commit"
@ -1146,7 +1146,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Bạn cũng có thể dùng `HEAD` như là tham chiếu tương đối. Thử dùng nó để leo commit vài lần nào" "Bạn cũng có thể dùng `HEAD` như là tham chiếu tương đối. Thử dùng nó để leo commit vài lần nào."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Game là dễ! Du hành ngược thời gian với `HEAD^`" "Game là dễ! Du hành ngược thời gian với `HEAD^`"

View file

@ -1000,10 +1000,10 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Toán tử \"~\"", "### Toán tử \"~\"",
"", "",
"Giả sử bạn muốn leo lên nhiều cấp trong git. Dùng `^` vài lần thì tù lắm, nên Git đã có dấu ngã (~) cho việc đó.", "Giả sử bạn muốn leo lên nhiều cấp trong Git. Dùng `^` vài lần thì tù lắm, nên Git đã có dấu ngã (~) cho việc đó.",
"", "",
"", "",
"Theo sau toán tử ngã (~) là số lượng cha ông mà bạn muốn leo lên(không bắt buộc). Xem thử làm thật thì thế nào nào" "Theo sau toán tử ngã (~) là số lượng cha ông mà bạn muốn leo lên (không bắt buộc). Xem thử làm thật thì thế nào nào."
] ]
} }
}, },
@ -1043,7 +1043,7 @@ exports.level = {
"Xem thử cái lệnh trên hoạt động sao nào." "Xem thử cái lệnh trên hoạt động sao nào."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Đóóóó! Tham chiếu tương đối cho chúng ta một cách chuẩn xác để trỏ tới `C1` và ép nhánh bằng (`-f`) thì dịch chuyển nhanh chóng nhánh tới đó." "Đóóóó! Tham chiếu tương đối cho chúng ta một cách chuẩn xác để trỏ tới `C1` và ép nhánh bằng (`-f`) để dịch chuyển nhanh chóng nhánh tới đó."
], ],
"command": "git branch -f main HEAD~3", "command": "git branch -f main HEAD~3",
"beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix" "beforeCommand": "git commit; git commit; git commit; git checkout -b bugFix"
@ -1053,7 +1053,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Giờ thì bạn đã thấy cách kết hợp tham chiếu tương đối và ép nhánh, dùng chúng để vượt level tiếp thôi.", "Bây giờ khi bạn đã biết về các tham chiếu tương đối và ép buộc nhánh, hãy sử dụng chúng để giải quyết cấp độ tiếp theo",
"", "",
"Để hoàn thành cấp độ này, chuyển `HEAD`, `main`, và `bugFix` đến mục tiêu được xác định của chúng." "Để hoàn thành cấp độ này, chuyển `HEAD`, `main`, và `bugFix` đến mục tiêu được xác định của chúng."
] ]

View file

@ -38,7 +38,7 @@ exports.level = {
"ja": "revertとresetとで引数が異なることに注意。", "ja": "revertとresetとで引数が異なることに注意。",
"ru_RU": "Обрати внимание, что revert и reset принимают разные параметры.", "ru_RU": "Обрати внимание, что revert и reset принимают разные параметры.",
"uk": "Зверни увагу на те що revert та reset приймають різні параметри", "uk": "Зверни увагу на те що revert та reset приймають різні параметри",
"vi": "Lưu ý rằng hoàn tác(revert) và đặt lại(reset) có những đối số khác nhau.", "vi": "Lưu ý rằng hoàn tác (revert) và đặt lại (reset) có những đối số khác nhau.",
"sl_SI": "Revert in reset sprejmeta različne argumente.", "sl_SI": "Revert in reset sprejmeta različne argumente.",
"it_IT": "Revert e reset hanno parametri diversi.", "it_IT": "Revert e reset hanno parametri diversi.",
"pl": "Zauważ, że revert i reset przyjmują różne argumenty", "pl": "Zauważ, że revert i reset przyjmują różne argumenty",
@ -938,7 +938,7 @@ exports.level = {
"", "",
"Có rất nhiều cách để hoàn tác thay đổi trong Git. Và cũng tương tự như commit, hủy thay đổi trong Git có cả thành phần bậc thấp (tạm thời lưu trữ một số tệp hoặc đoạn độc lập) và thành phần bậc cao (cách mà các thay đổi thực sự bị hủy). Ứng dụng của chúng tôi tập trung vào cái sau.", "Có rất nhiều cách để hoàn tác thay đổi trong Git. Và cũng tương tự như commit, hủy thay đổi trong Git có cả thành phần bậc thấp (tạm thời lưu trữ một số tệp hoặc đoạn độc lập) và thành phần bậc cao (cách mà các thay đổi thực sự bị hủy). Ứng dụng của chúng tôi tập trung vào cái sau.",
"", "",
"Có 2 cách nguyên thủy để hủy thay đổi trong Git -- một là dùng `git reset` và cách khác là dùng `git revert`. Chúng ta sẽ xem xét từng cái trong hội thoại sau", "Có 2 cách cơ bản để hủy thay đổi trong Git -- một là dùng `git reset`, hai là dùng `git revert`. Chúng ta sẽ xem xét từng cái trong hộp thoại sau",
"" ""
] ]
} }
@ -954,7 +954,7 @@ exports.level = {
"Cùng xem thử nó trông thế nào nào:" "Cùng xem thử nó trông thế nào nào:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Hay! Git chuyển tham chiếu của main trở lại `C1`; bây giờ kho cá nhân của ta trông như thể commit `C2` chưa bao giờ xảy ra vậy." "Hay! Git chuyển tham chiếu của main trở lại `C1`; bây giờ kho lưu trữ trông như thể commit `C2` chưa bao giờ xảy ra vậy."
], ],
"command": "git reset HEAD~1", "command": "git reset HEAD~1",
"beforeCommand": "git commit" "beforeCommand": "git commit"
@ -966,12 +966,12 @@ exports.level = {
"beforeMarkdowns": [ "beforeMarkdowns": [
"## Git Revert", "## Git Revert",
"", "",
"Trong khi git reset hoạt động rất tốt tại nhánh cục bộ trên máy cá nhân, cách thức \"viết lại lịch sử\" chẳng hề có tác dụng lên nhánh ở phương xa mà người khác sử dụng.", "Trong khi git reset hoạt động rất tốt tại nhánh cục bộ trên máy cá nhân, cách thức \"viết lại lịch sử\" chẳng hề có tác dụng lên nhánh ở từ xa mà người khác sử dụng.",
"", "",
"Để có thể hoàn tác và *chia sẻ* hoàn tác đó với người khác, thì ta cần sử dụng `git revert`. Xem thử cách thức nó hoạt động nào" "Để có thể hoàn tác và *chia sẻ* hoàn tác đó với người khác, thì ta cần sử dụng `git revert`. Xem thử cách thức nó hoạt động nào"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Lạ nhỉ, một commit mới được thả vào bên dưới commit mà ta muốn hoàn tác. Đó là bởi vì commit mới `C2'` này có chứa *thay đổi* -- đó là những thay đổi về hoàn tác commit `C2`.", "Lạ nhỉ, một commit mới được thả vào bên dưới commit mà ta muốn hoàn tác. Đó là bởi vì commit mới `C2'` này có chứa những *thay đổi* hoàn toàn ngược lại với những thay đổi trong commit `C2`.",
"", "",
"Dùng revert thì bạn có thể đẩy thay đổi mình lên và chia sẻ với người khác." "Dùng revert thì bạn có thể đẩy thay đổi mình lên và chia sẻ với người khác."
], ],
@ -983,9 +983,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Để hoàn thành cấp độ này, hoàn tác commit gần nhất trên cả `local` (`cục bộ`) và `pushed` (`được đẩy`). Bạn sẽ hoàn tác tổng cộng 2 commit(một trên mỗi nhánh).", "Để hoàn thành cấp độ này, hoàn tác commit gần nhất trên cả `local` và `pushed`. Bạn sẽ hoàn tác tổng cộng 2 commit (một trên mỗi nhánh).",
"", "",
"Nhớ rằng `pushed` là nhánh ở phương xa và `local` là nhánh địa phương -- như thế thì bạn sẽ chọn được phương án phù hợp." "Nhớ rằng `pushed` là nhánh từ xa và `local` là nhánh cục bộ -- như thế thì bạn sẽ chọn được phương án phù hợp."
] ]
} }
} }

View file

@ -40,7 +40,7 @@ exports.level = {
"zh_TW": "要記住喔! 把 main branch 留到最後更新可能是最有效率的方法。", "zh_TW": "要記住喔! 把 main branch 留到最後更新可能是最有效率的方法。",
"ru_RU": "Не забудь, что лучше всего сдвинуть мастер в самом конце...", "ru_RU": "Не забудь, что лучше всего сдвинуть мастер в самом конце...",
"uk": "Не забувай, що краще всього буде перемістити main в самому кінці... ", "uk": "Не забувай, що краще всього буде перемістити main в самому кінці... ",
"vi": "Hãy nhớ rằng, cách tốt nhất có lẽ là nên cuối cùng mới cập nhật nhánh `main`... ", "vi": "Hãy nhớ rằng, cách tốt nhất có thể là cập nhật nhánh `main` sau cùng...",
"sl_SI": "Pomni, morda je najbolj učinkovit način posodabljanje masterja samo na koncu ...", "sl_SI": "Pomni, morda je najbolj učinkovit način posodabljanje masterja samo na koncu ...",
"it_IT": "it_IT":
"Ricorda, il modo migliore potrebbe essere di aggiornare il main alla fine...", "Ricorda, il modo migliore potrebbe essere di aggiornare il main alla fine...",
@ -289,16 +289,17 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Rebase nhiều nhánh", "### Rebase nhiều nhánh",
"", "",
"Giời ạ, sao mà nhiều nhánh thế khôn biết! Chuyển hết chúng vào `main` thôi.", "Giời ạ, sao mà nhiều nhánh thế không biết! Chuyển hết chúng vào `main` thôi.",
"", "",
"Nhưng mà cha quản lý lại muốn oái oăm hơn cơ -- hắn muốn tất cả commit xếp thẳng hàng. Nghĩa là cây lịch sử của ta sẽ có `C7'` ở cuối, phía trên là`C6'`, và cứ thế theo đúng thứ tự.", "Nhưng mà cha quản lý lại muốn oái oăm hơn cơ -- hắn muốn tất cả commit xếp thẳng hàng. Nghĩa là cây lịch sử của ta sẽ có `C7'` ở cuối, phía trên là `C6'`, và cứ thế theo đúng thứ tự.",
"", "",
"Nếu mà nhỡ may bạn làm nhầm thì có thể dùng lệnh `reset` để bắt đầu lại. Hãy nhớ đối chiếu với đáp án của chúng tôi xem bạn có thể hoàn thành với ít câu lệnh hơn không!" "Nếu mà nhỡ may bạn làm nhầm thì có thể dùng lệnh `reset` để bắt đầu lại. Hãy nhớ đối chiếu với đáp án của chúng tôi xem bạn có thể hoàn thành với ít câu lệnh hơn không!"
] ]
} }
} }
] ]
}, "sl_SI": { },
"sl_SI": {
"childViews": [ "childViews": [
{ {
"type": "ModalAlert", "type": "ModalAlert",

View file

@ -315,16 +315,17 @@ exports.level = {
"", "",
"Chààà, anh bạn! Thử thách lần này hơi khoai đây.", "Chààà, anh bạn! Thử thách lần này hơi khoai đây.",
"", "",
"Hiện tại thì nhánh `main` đang có nhiều commit hơn các nhánh `one`, `two` và `three`. Vì một lý do nào đó, ta cần cập nhật những commit trên nhánh `main` lên các nhánh còn lại kèm với một vài điều chỉnh .", "Hiện tại thì nhánh `main` đang có trước vài commit so với các nhánh `one`, `two` và `three`. Vì một lý do nào đó, ta cần cập nhật những commit trên nhánh `main` lên các nhánh còn lại kèm với một vài điều chỉnh.",
"", "",
"Nhánh `one` thì cần sắp xếp lại và xóa commit `C5`, trong khi đó nhánh `two` thì đơn giản sắp xếp, còn `three` thì chỉ cần một commit!", "Nhánh `one` cần sắp xếp lại commit và xóa commit `C5`, nhánh `two` chỉ cần sắp xếp commit, còn `three` thì cần chuyển đi một commit!",
"", "",
"Cố gắng động não tìm ra cách đi nhé -- khi bạn làm xong thì nhớ so sánh với đáp án của chúng tôi bằng lệnh `show solution`. " "Cố gắng động não tìm ra cách đi nhé -- khi bạn làm xong thì nhớ so sánh với đáp án của chúng tôi bằng lệnh `show solution`. "
] ]
} }
} }
] ]
}, "sl_SI": { },
"sl_SI": {
"childViews": [ "childViews": [
{ {
"type": "ModalAlert", "type": "ModalAlert",

View file

@ -34,7 +34,7 @@ exports.level = {
"ru_RU": "Простой git clone!", "ru_RU": "Простой git clone!",
"ko": "그냥 git clone 하세요!", "ko": "그냥 git clone 하세요!",
"uk": "Просто git clone!", "uk": "Просто git clone!",
"vi": "Đơn giản là `git clone`!", "vi": "Đơn giản là git clone!",
"sl_SI": "Preprosto samo git clone!", "sl_SI": "Preprosto samo git clone!",
"pl": "Po prostu git clone!", "pl": "Po prostu git clone!",
"it_IT": "Semplicemente git clone!" "it_IT": "Semplicemente git clone!"
@ -786,17 +786,17 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## Git Remotes(Kho lưu trữ từ xa)", "## Git Remotes (Kho lưu trữ từ xa)",
"", "",
"Thực ra thì kho remote cũng không khó hiểu lắm đâu. Giờ đây đâu đâu cũng thấy điện toán đám mây nên ai ai cũng tưởng git remote nó là cái gì đó ma thuật lắm, nhưng chúng thực ra chỉ là những bản sao chép ko chứa của bạn lên máy tính khác. Bạn có thể giao tiếp với chúng qua internet, tù đó mà chuyển giao commit qua lại.", "Thực ra thì kho chứa từ xa cũng không khó hiểu lắm đâu. Giờ đây, đâu đâu cũng thấy điện toán đám mây nên ai ai cũng tưởng git remote nó là cái gì đó ma thuật lắm, nhưng chúng thực ra chỉ là những bản sao chép kho chứa của bạn lên máy tính khác. Bạn có thể giao tiếp với chúng qua internet, t đó mà chuyển giao commit qua lại.",
"", "",
"Vì lẽ đó mà kho remote có những đặc tính tuyệt vời:", "Vì lẽ đó mà kho chứa từ xa có những đặc tính tuyệt vời:",
"", "",
"- Trước hết, có tác dụng như là bản sao dự phòng! Bạn đã biết rằng kho địa phương có thể khôi phục trở lại trạng thái trước đó, nhưng tất cả thông tin đó chỉ được lưu trữ cục bộ. Bằng cách sao chép toàn bộ kho chứa của bạn lên máy tính ở xa, bạn hoàn toàn có thể mất hết dữ liệu tại máy tính mà vẫn tiếp tục làm việc như chưa có gì xảy ra.", "- Trước hết, có tác dụng như là bản sao dự phòng! Bạn đã biết rằng kho cục bộ có thể khôi phục trở lại trạng thái trước đó, nhưng tất cả thông tin đó chỉ được lưu trữ cục bộ. Bằng cách sao chép toàn bộ kho chứa của bạn lên máy tính ở xa, một khi dữ liệu trong máy tính bị mất, bạn vẫn có thể tiếp tục làm việc như chưa có gì xảy ra.",
"", "",
"- Quạn trọng hơn nữa, kho remote khiến lập trình có tính cộng đồng hơn! Bây giờ bản sao dự án của bạn đã được lưu trũ ở nơi khác, bạn bè của bạn có thể đóng góp (hoặc kéo về cập nhật mới nhất) dự án của bạn rất dễ dàng.", "- Quan trọng hơn nữa, kho chứa từ xa khiến lập trình có tính cộng đồng hơn! Bây giờ bản sao dự án của bạn đã được lưu tr ở nơi khác, bạn bè của bạn có thể đóng góp (hoặc kéo về cập nhật mới nhất) dự án của bạn rất dễ dàng.",
"", "",
"Trực quan hóa các kho lưu trữ từ xa bằng cách sử dụng các trang web đang trở nên phổ biến hơn (như [GitHub] (https://github.com/) hoặc [Photypeator] (http://phovenator.org/)), nhưng các kho lưu trữ từ xa * * Luôn luôn ** là trụ cột của các công cụ này, vì vậy điều quan trọng là phải hiểu khái niệm này!" "Trực quan hóa các kho lưu trữ từ xa bằng cách sử dụng các trang web đang trở nên phổ biến hơn (như [GitHub](https://github.com/)), nhưng các kho lưu trữ từ xa _luôn luôn_ là trụ cột của các công cụ này, vì vậy điều quan trọng là phải hiểu khái niệm này!"
] ]
} }
}, },
@ -806,9 +806,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Câu lệnh của chúng tôi để tạo kho lưu trữ từ xa", "## Câu lệnh của chúng tôi để tạo kho lưu trữ từ xa",
"", "",
"Cho đến bây giờ, Learn Git Branching đã tập trung dạy về làm việc trên kho chứa _địa phương_ (rẽ nhánh `branch`, hợp nhánh `merge`, dịch chuyển nhánh `rebase`, vân vân ...). Nhưng bây giờ ta lại muốn học về làm việc trên kho lưu trữ từ xa, ta cần một câu lệnh để cài đặt môi trường cho những bài học này. Đó là `git clone`", "Cho đến bây giờ, Học Nhánh Git đã tập trung dạy về làm việc trên kho chứa _cục bộ_ (rẽ nhánh `branch`, hợp nhánh `merge`, dịch chuyển nhánh `rebase`,...). Nhưng bây giờ ta lại muốn học về làm việc trên kho lưu trữ từ xa, ta cần một câu lệnh để cài đặt môi trường cho những bài học này. Đó là `git clone`.",
"", "",
"Về mặt kỹ thuật, thì `git clone` thực tế là câu lệnh dùng để tạo một bản sao chép _địa phương_ của khó chứa từ xa (ví dụ từ github chẳng hạn). Nhưng trong Learn Git Branching ta sẽ dùng câu lệnh này hơi khác biệt một chút -- `git clone` sẽ tạo ra một bản sao chép lên kho lưu trữu từ xa dựa trên kho chứa cục bộ của bạn. Điều này hoàn toàn ngược lại với câu lệnh thực tế, nhưng nó giúp ta nhân bản và làm việc với kho lưu trữ từ xa, nên ta sẽ dùng nó trong quá trình học.", "Về mặt kỹ thuật, thì `git clone` thực tế là câu lệnh dùng để tạo một bản sao chép _cục bộ_ của kho chứa từ xa (ví dụ từ GitHub chẳng hạn). Nhưng trong Học Nhánh Git ta sẽ dùng câu lệnh này hơi khác biệt một chút -- `git clone` sẽ tạo ra một bản sao chép lên kho lưu trữ từ xa dựa trên kho chứa cục bộ của bạn. Điều này hoàn toàn ngược lại với câu lệnh thực tế, nhưng nó giúp ta nhân bản và làm việc với kho lưu trữ từ xa, nên ta sẽ dùng nó trong quá trình học.",
"" ""
] ]
} }
@ -821,7 +821,7 @@ exports.level = {
"" ""
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Nó đây rồi! Giờ ta đã có kho lưu trữ dự án chúng ta từ xa. Nhìn nó cũng khá tương tự chỉ là được minh họa khác biệt một chút -- đến các cấp độ sau ta sẽ tìm hiểu thêm về cách thức trao đổi nội dung giữa các kho chứa này." "Nó đây rồi! Giờ ta đã có kho lưu trữ dự án từ xa. Nhìn nó cũng khá tương tự chỉ là được minh họa khác biệt một chút -- đến các cấp độ sau ta sẽ tìm hiểu thêm về cách thức trao đổi nội dung giữa các kho chứa này."
], ],
"command": "git clone", "command": "git clone",
"beforeCommand": "" "beforeCommand": ""

View file

@ -35,7 +35,7 @@ exports.level = {
"ru_RU": "помните, Вы можете указать количество фейковых коммитов", "ru_RU": "помните, Вы можете указать количество фейковых коммитов",
"uk": "пам’ятай що ти можеш вказати кількість фейкових комітів", "uk": "пам’ятай що ти можеш вказати кількість фейкових комітів",
"ko": "가장할 커밋의 갯수를 조절할 수 있습니다.", "ko": "가장할 커밋의 갯수를 조절할 수 있습니다.",
"vi": "Nhớ rằng bạn có thể chỉ định số lượng commit để giả lập.", "vi": "Nhớ rằng bạn có thể chỉ định số lượng commit để giả lập",
"sl_SI": "Spomni se, da lahko določiš število lažnih commitov.", "sl_SI": "Spomni se, da lahko določiš število lažnih commitov.",
"pl": "Pamiętaj, że możesz określić liczbę symulowanych commitów", "pl": "Pamiętaj, że możesz określić liczbę symulowanych commitów",
"it_IT": "Tieni a mente che puoi specificare il numero di commit da simulare" "it_IT": "Tieni a mente che puoi specificare il numero di commit da simulare"

View file

@ -998,11 +998,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Fetch", "## Git Fetch",
"", "",
"Lam việc với git remote về căn bản là chuyển giao dữ liệu _qua__lại_ giữa các kho chứa. Miễn là ta có thể chia sẻ qua lại các commit, ta có thể chia sẻ bất kỳ cập nhật gì được theo dõi bở git (và từ đó chia sẻ thành quả, tập tin mới, ý tưởng mới, thư tình, các kiểu con đà điểu.).", "Làm việc với git remote về căn bản là chuyển giao dữ liệu qua và lại giữa các kho chứa. Miễn là ta có thể chia sẻ qua lại các commit, ta có thể chia sẻ bất kỳ cập nhật gì được theo dõi bở Git (và từ đó chia sẻ thành quả, tập tin mới, ý tưởng mới, thư tình, các kiểu con đà điểu.).",
"", "",
"Ở bài học này ta sẽ học cách lấy dữ liệu về _từ_ một kho chứa từ xa -- lệnh đó là `git fetch`.", "Ở bài học này ta sẽ học cách lấy dữ liệu về từ một kho chứa từ xa -- lệnh đó là `git fetch`.",
"", "",
"Bạn sẽ nhận thấy rằng khi ta cập nhật đại điện kho chứa từ xa, Nhánh _từ xa_ của ta cũng được cập nhật để phản ánh đại diện đó. Điều này liên quan đến bài học trước về nhánh từ xa." "Bạn sẽ nhận thấy rằng khi ta cập nhật đại điện kho chứa từ xa, nhánh _từ xa_ của ta cũng được cập nhật để phản ánh đại diện đó. Điều này liên quan đến bài học trước về nhánh từ xa."
] ]
} }
}, },
@ -1010,7 +1010,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Trước khi đi vào chi tiết về `git fetch`, hãy xem cách nó hoạt động! Ở đây ta có một kho chứa từ xa trong đó chứa 2 commit mà kho chứa địa phương của ta không có." "Trước khi đi vào chi tiết về `git fetch`, hãy xem cách nó hoạt động! Ở đây ta có một kho chứa từ xa trong đó chứa 2 commit mà kho chứa cục bộ của ta không có."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Đó! Commit `C2` và `C3` đã được tải xuống kho chứa cục bộ của ta, và nhánh từ xa `o/main` của ta đã được cập nhật để phản ánh điều này." "Đó! Commit `C2` và `C3` đã được tải xuống kho chứa cục bộ của ta, và nhánh từ xa `o/main` của ta đã được cập nhật để phản ánh điều này."
@ -1030,9 +1030,9 @@ exports.level = {
"* tải xuống commit có trên kho chứa từ xa mà kho chứa cục bộ của ta không có, và...", "* tải xuống commit có trên kho chứa từ xa mà kho chứa cục bộ của ta không có, và...",
"* cập nhật nơi mà nhánh từ xa của ta trỏ tới (ví dụ nhánh `o/main`)", "* cập nhật nơi mà nhánh từ xa của ta trỏ tới (ví dụ nhánh `o/main`)",
"", "",
"Về căn bản thì `git fetch` đưa đại diện _địa phương_ của kho chứa từ xa của ta về trạng thái đồng bộ với trạng thái _thực tế_ của kho chứa từ xa (ngay lúc này).", "Về căn bản thì `git fetch` đưa đại diện _cục bộ_ của kho chứa từ xa của ta về trạng thái đồng bộ với trạng thái _thực tế_ của kho chứa từ xa (ngay lúc này).",
"", "",
"Nếu bạn còn nhớ thì trong bài học trước, chúng tôi có đề cập rằng nhánh từ xa phản ánh trạng thái của kho chứa từ xa _kể từ_ kể từ lần cuối bạn tương tác với các nhánh từ xa đó. `git fetch` chính là cách để tương tác với cách nhánh từ xa! Hi vọng chúng tôi đã làm sáng tỏ sự liên kết giữa nhánh từ xa và `git fetch`.", "Nếu bạn còn nhớ thì trong bài học trước, chúng tôi có đề cập rằng nhánh từ xa phản ánh trạng thái của kho chứa từ xa kể từ lần cuối bạn tương tác với các nhánh từ xa đó. `git fetch` chính là cách để tương tác với các nhánh từ xa! Hy vọng chúng tôi đã làm sáng tỏ sự liên kết giữa nhánh từ xa và `git fetch`.",
"", "",
"`git fetch` thường tương tác với kho chứa từ xa bằng Internet (thông qua các giao thức như `http://` hoặc `git://`).", "`git fetch` thường tương tác với kho chứa từ xa bằng Internet (thông qua các giao thức như `http://` hoặc `git://`).",
"" ""
@ -1043,11 +1043,11 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"### fetch không làm gì", "### Fetch không làm gì",
"", "",
"Tuy nhiên, `git fetch` không hề thay đổi trạng thái kho chứa _địa phương_ của bạn. Nó sẽ không cập nhật nhánh `main` hay thay đổi bất kỳ điều gì trong hệ thống tập tin hiện tại của bạn.", "Tuy nhiên, `git fetch` không hề thay đổi trạng thái kho chứa _cục bộ_ của bạn. Nó sẽ không cập nhật nhánh `main` hay thay đổi bất kỳ điều gì trong hệ thống tập tin hiện tại của bạn.",
"", "",
"Điều này rất quan trọng, vì nhiều nhà phát triển nghĩ rằng `git fetch` sẽ làm kho chứa địa phương của họ phản ánh trạng thái của kho chúa từ xa. Nó có thể tải xuống tất cả dữ liệu cần thiết, nhưng nó thực tế _không_ thay đổi bất cứ thứ gì trên tập tin địa phương của bạn. Ta sẽ học lệnh để làm điều đó sau :D", "Điều này rất quan trọng, vì nhiều nhà phát triển nghĩ rằng `git fetch` sẽ làm kho chứa cục bộ của họ phản ánh trạng thái của kho chứa từ xa. Nó có thể tải xuống tất cả dữ liệu cần thiết, nhưng nó thực tế không thay đổi bất cứ thứ gì trên tập tin cục bộ của bạn. Ta sẽ học lệnh để làm điều đó sau :D",
"", "",
"Nói tóm lại, bạn có thể coi `git fetch` thuần túy như một bước tải xuống." "Nói tóm lại, bạn có thể coi `git fetch` thuần túy như một bước tải xuống."
] ]

View file

@ -35,7 +35,7 @@ exports.level = {
"ru_RU": "Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой \"help level\"", "ru_RU": "Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой \"help level\"",
"ko": "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다.", "ko": "커밋 ID가 바뀔수도있으니 주의하세요! \"help level\"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다.",
"uk": "Зверни увагу на те, що номери комітів можуть змінюватися! Слайди уроку можна переглянути ще раз командою \"help level\"", "uk": "Зверни увагу на те, що номери комітів можуть змінюватися! Слайди уроку можна переглянути ще раз командою \"help level\"",
"vi": "Lưu ý id của các commit bị tráo đổi, bạn có thể dùng \"help level\" để đọc lại hội thoại", "vi": "Lưu ý id của các commit bị tráo đổi, bạn có thể dùng \"help level\" để đọc lại hộp thoại",
"sl_SI": "Bodi pozoren kako so se commit id-ji morda zamenjali! Ponovno lahko prebereš navodila z \"help level\".", "sl_SI": "Bodi pozoren kako so se commit id-ji morda zamenjali! Ponovno lahko prebereš navodila z \"help level\".",
"pl": "Zauważ, że identyfikatory commitów mogły zostać zamienione! Slajdy możesz przeczytać jeszcze raz po wpisaniu: \"help level\"", "pl": "Zauważ, że identyfikatory commitów mogły zostać zamienione! Slajdy możesz przeczytać jeszcze raz po wpisaniu: \"help level\"",
"it_IT": "Fai attenzione, alcuni ID dei commit potrebbero essere invertiti! Puoi leggere nuovamente le slide con \"help level\"" "it_IT": "Fai attenzione, alcuni ID dei commit potrebbero essere invertiti! Puoi leggere nuovamente le slide con \"help level\""
@ -1665,7 +1665,7 @@ exports.level = {
"", "",
"Chúng ta vừa tìm hiểu về tham số của git push, sự tuyệt vời của tham số `<vị trí>`, và thậm chí cả refspecs (`<nguồn>:<đích>`). Liệu ta có thể áp dụng điều này vào `git fetch` không nhỉ?", "Chúng ta vừa tìm hiểu về tham số của git push, sự tuyệt vời của tham số `<vị trí>`, và thậm chí cả refspecs (`<nguồn>:<đích>`). Liệu ta có thể áp dụng điều này vào `git fetch` không nhỉ?",
"", "",
"Đoán chuẩn rồi đấy! Tham số cho lệnh `git fetch` thực ra *rất, rất* giống với `git push`. Chúng có chung khái niệm nhưng được áp dụng cho hướng ngược lại(vì bây giờ ta tải xuống commit chứ không phải tải lên).", "Đoán chuẩn rồi đấy! Tham số cho lệnh `git fetch` thực ra *rất, rất* giống với `git push`. Chúng có chung khái niệm nhưng được áp dụng cho hướng ngược lại (vì bây giờ ta tải xuống commit chứ không phải tải lên).",
"", "",
"Hãy lần lượt đi qua từng khái niệm một..." "Hãy lần lượt đi qua từng khái niệm một..."
] ]
@ -1704,9 +1704,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Có thể bạn sẽ thắc mắc -- tại sao git lại thả các commit xuống nhánh `o/foo` thay vì nhánh `foo` ở kho chứa cục bộ? Tôi tưởng tham số `<vị trí>` tồn tại ở cả kho chứa cục bộ và kho chứa từ xa mà?", "Có thể bạn sẽ thắc mắc -- tại sao Git lại thả các commit xuống nhánh `o/foo` thay vì nhánh `foo` ở kho chứa cục bộ? Tôi tưởng tham số `<vị trí>` tồn tại ở cả kho chứa cục bộ và kho chứa từ xa mà?",
"", "",
"Chà trong trường hợp này git ứng xử có một chút ngoại lệ đặc biệt, vì có thể bạn đang làm việc trên nhánh `foo` ở kho chứa cục bộ mà bạn không muốn nó bị làm rối!! Điều này liên kết đến bài học trước về `git fetch` -- nó không cập nhật nhánh cục bộ không liên kết nhánh từ xa của bạn(nhánh không có tiền tố `origin/`), nó chỉ tải xuống các commit( mà bạn có thể xem xét hoặc hợp nhất sau).", "Chà trong trường hợp này Git ứng xử có một chút ngoại lệ đặc biệt, vì có thể bạn đang làm việc trên nhánh `foo` ở kho chứa cục bộ mà bạn không muốn nó bị làm rối!! Điều này liên kết đến bài học trước về `git fetch` -- nó không cập nhật nhánh cục bộ không liên kết nhánh từ xa của bạn (nhánh không có tiền tố `origin/`), nó chỉ tải xuống các commit (mà bạn có thể xem xét hoặc hợp nhất sau).",
"" ""
] ]
} }
@ -1717,9 +1717,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"\"Nếu vậy, thì điều gì sẽ xảy ra nếu tôi chỉ định cả nguồn và đích với `<nguồn>:<đích>`?\"", "\"Nếu vậy, thì điều gì sẽ xảy ra nếu tôi chỉ định cả nguồn và đích với `<nguồn>:<đích>`?\"",
"", "",
"Nếu bạn nhất quyết muốn tải commit *trực tiếp* xuống nhánh cục bộ,thì bạn có thể chỉ định điều này bằng cách dùng refspec hai chấm. Bạn không thể nạp commit vào nhánh mà bạn đang đứng, nhưng git sẽ cho phép bạn làm điều này:", "Nếu bạn nhất quyết muốn tải commit *trực tiếp* xuống nhánh cục bộ, thì bạn có thể chỉ định điều này bằng cách dùng refspec hai chấm. Bạn không thể nạp commit vào nhánh mà bạn đang đứng, nhưng Git sẽ cho phép bạn làm điều này:",
"", "",
"Đây là cách duy nhất -- `<nguồn>` là vị trí trên kho *từ xa* và `<đích>` là vị trí *cục bộ* để đặt các commit. Điều này hoàn toàn ngược lại với `git push`, và đó là tất nhiên thôi vì ta đang chuyển giao dữ liệu theo hướng ngược lại!", "Đây là cách duy nhất -- `<nguồn>` là vị trí trên kho chứa *từ xa* và `<đích>` là vị trí *cục bộ* để đặt các commit. Điều này hoàn toàn ngược lại với `git push`, và đó là tất nhiên thôi vì ta đang chuyển giao dữ liệu theo hướng ngược lại!",
"", "",
"Thực tế là, các nhà phát triển rất hiếm khi làm điều này. Tôi giới thiệu về nó chủ yếu là vì muốn giải thích rõ hơn việc `fetch` và `push` là khá tương đồng, chỉ là theo hướng ngược lại." "Thực tế là, các nhà phát triển rất hiếm khi làm điều này. Tôi giới thiệu về nó chủ yếu là vì muốn giải thích rõ hơn việc `fetch` và `push` là khá tương đồng, chỉ là theo hướng ngược lại."
] ]
@ -1732,7 +1732,7 @@ exports.level = {
"Lấy một ví dụ điên rồ..." "Lấy một ví dụ điên rồ..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Wao! Thấy chứ, git diễn giải `foo~1` thành một vị trí trên kho chứa từ xa sau đó tải xuống các commit lên nhánh `bar` ở kho chứa cục bộ. Để ý rằng nhánh `foo` và `o/foo` không hề được cập nhật vì ta đã chỉ định đích đến." "Wao! Thấy chứ, Git diễn giải `foo~1` thành một vị trí trên kho chứa từ xa sau đó tải xuống các commit lên nhánh `bar` ở kho chứa cục bộ. Để ý rằng nhánh `foo` và `o/foo` không hề được cập nhật vì ta đã chỉ định đích đến."
], ],
"command": "git fetch origin foo~1:bar", "command": "git fetch origin foo~1:bar",
"beforeCommand": "git branch foo; git clone; git branch bar; git fakeTeamwork foo 2" "beforeCommand": "git branch foo; git clone; git branch bar; git fakeTeamwork foo 2"
@ -1745,7 +1745,7 @@ exports.level = {
"Nếu như đích đến chưa hề tồn tại trước khi tôi chạy lệnh thì sao? Cùng xem lại ví dụ vừa rồi nhưng lần này nhánh `bar` chưa hề tồn tại." "Nếu như đích đến chưa hề tồn tại trước khi tôi chạy lệnh thì sao? Cùng xem lại ví dụ vừa rồi nhưng lần này nhánh `bar` chưa hề tồn tại."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Thấy chứ, nó Y HỆT với git push. Git tạo ra đích đến ở kho chứa cục bộ trước khi nạp, cũng giống như git sẽ tạo ra đích đến trên kho chứa từ xa trước khi đẩy (trong trường hợp nó không tồn tại)." "Thấy chứ, nó Y HỆT với git push. Git tạo ra đích đến ở kho chứa cục bộ trước khi nạp, cũng giống như Git sẽ tạo ra đích đến trên kho chứa từ xa trước khi đẩy (trong trường hợp nó không tồn tại)."
], ],
"command": "git fetch origin foo~1:bar", "command": "git fetch origin foo~1:bar",
"beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2" "beforeCommand": "git branch foo; git clone; git fakeTeamwork foo 2"
@ -1772,7 +1772,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Được rồi, lý thuyết như vậy là đủ rồi! Để hoàn thành cấp độ này, hãy chỉ nạp những commit được chỉ định trong mô tả mục tiêu. Thoải mái ứng biến với những câu lệnh nhé!", "Được rồi, lý thuyết như vậy là đủ rồi! Để hoàn thành cấp độ này, hãy chỉ nạp những commit được chỉ định trong mô tả mục tiêu. Thoải mái ứng biến với những câu lệnh nhé!",
"", "",
"Bạn sẽ phải chỉ định nguồn và dích cho lệnh fetch. Chú ý đến mô tả mục tiêu vì các ID có thể bị xáo trộn!" "Bạn sẽ phải chỉ định nguồn và đích cho lệnh fetch. Chú ý đến mô tả mục tiêu vì các ID có thể bị xáo trộn!"
] ]
} }
} }

View file

@ -35,7 +35,7 @@ exports.level = {
"ru_RU": "проверьте сортировку в визуализации цели", "ru_RU": "проверьте сортировку в визуализации цели",
"uk": "перевірте порядок в візуалізації цілі", "uk": "перевірте порядок в візуалізації цілі",
"ko": "순서는 goal을 참고하세요", "ko": "순서는 goal을 참고하세요",
"vi": "kiểm tra kỹ thứ tự trên mô hình mục tiêu", "vi": "Kiểm tra kỹ thứ tự trên mô hình mục tiêu",
"sl_SI": "Preveri vrstni red iz ciljne vizualizacije.", "sl_SI": "Preveri vrstni red iz ciljne vizualizacije.",
"pl": "Przyjrzyj się kolejności na wizualizacji celu", "pl": "Przyjrzyj się kolejności na wizualizacji celu",
"it_IT": "Controlla l'ordinamento dalla schermata dell'obiettivo" "it_IT": "Controlla l'ordinamento dalla schermata dell'obiettivo"
@ -1908,7 +1908,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Diverged Work", "## Diverged Work",
"", "",
"Cho đến giờ ta đã biết cách `kéo`(`pull`) commit từ nơi khác về và cách `đẩy`(`push`) lên những thay đổi của ta. Chúng nhìn có vẻ khá đơn giản, vậy tại sao người ta lại thấy lúng túng về chúng?", "Cho đến giờ ta đã biết cách `kéo` (`pull`) commit từ nơi khác về và cách `đẩy` (`push`) lên những thay đổi của ta. Chúng nhìn có vẻ khá đơn giản, vậy tại sao người ta lại thấy lúng túng về chúng?",
"", "",
"Khó khăn đến từ sự *dị biệt* của cây lịch sử trên kho chứa từ xa. Trước khi đi vào thảo luận chi tiết vấn đề này, hãy xem qua một ví dụ...", "Khó khăn đến từ sự *dị biệt* của cây lịch sử trên kho chứa từ xa. Trước khi đi vào thảo luận chi tiết vấn đề này, hãy xem qua một ví dụ...",
"" ""
@ -1921,9 +1921,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"Tưởng tượng bạn sao chép một kho chứa vào thứ Hai và bắt đầu phát triển một tính năng mới. Đến thứ Sáu thì bạn đã sẵn sàng để xuất bản thành quả của mình -- nhưng không! Đồng nghiệp của bạn đã viết thêm hàng loạt mã trong một tuần vừa rồi và điều này làm cho chức năng của bạn trở nên lỗi thời. Và họ cũng đã xuất bản những commit này lên kho chứa từ xa chung, vậy giờ thành quả của *bạn* lại dựa trên phiên bản *cũ* của dự án mà nó không còn thích đáng nữa.", "Tưởng tượng bạn sao chép một kho chứa vào thứ Hai và bắt đầu phát triển một tính năng mới. Đến thứ Sáu thì bạn đã sẵn sàng để xuất bản thành quả của mình -- nhưng không! Đồng nghiệp của bạn đã viết thêm hàng loạt mã trong một tuần vừa rồi và điều này làm cho chức năng của bạn trở nên lỗi thời. Và họ cũng đã xuất bản những commit này lên kho chứa từ xa chung, vậy giờ thành quả của *bạn* lại dựa trên phiên bản *cũ* của dự án mà nó không còn thích đáng nữa.",
"", "",
"Trong trường hợp này, lệnh `git push` trở lên khá nhập nhằng. Nếu bạn dùng `git push`, liệu git nên thay đổi kho chứa từ xa trơ rveef trạng thái ngày thứ Hai? Hay nó nên cố gắng thêm mã của bạn vào trong khi không xóa mã mới? Hay là nó sẽ bỏ qua hoàn toàn mã của bạn vì nó đã lỗi thời?", "Trong trường hợp này, lệnh `git push` trở lên khá nhập nhằng. Nếu bạn dùng `git push`, liệu git nên thay đổi kho chứa từ xa trở về trạng thái ngày thứ Hai? Hay nó nên cố gắng thêm mã của bạn vào trong khi không xóa mã mới? Hay là nó sẽ bỏ qua hoàn toàn mã của bạn vì nó đã lỗi thời?",
"", "",
"Vì có quá nhiều tình huống mơ hồ (dị biệt lịch sử), git sẽ không cho phép bạn `đẩy`(`push`) thay đổi của mình. Nó sẽ ép bạn phải sát nhập trạng thái mới nhất của kho chứa từ xa vào thành phẩm của mình trước khi chia sẻ chúng." "Vì có quá nhiều tình huống mơ hồ (dị biệt lịch sử), Git sẽ không cho phép bạn `đẩy` (`push`) thay đổi của mình. Nó sẽ ép bạn phải sát nhập trạng thái mới nhất của kho chứa từ xa vào thành phẩm của mình trước khi chia sẻ chúng."
] ]
} }
}, },
@ -1934,7 +1934,7 @@ exports.level = {
"Nói quá nhiều rồi! Đi vào hành động thôi" "Nói quá nhiều rồi! Đi vào hành động thôi"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Thấy chứ? Không có gì xảy ra cả vì lệnh bị thất bại. `git push` thất bại vì commit mới nhất của bạn: `C3` dựa trên commit `C1` ở nhánh từ xa. Nhánh đó đã được cập nhật lên commit `C2`, nên git từ chối lệnh đẩy của bạn" "Thấy chứ? Không có gì xảy ra cả vì lệnh bị thất bại. `git push` thất bại vì commit mới nhất của bạn: `C3` dựa trên commit `C1` ở nhánh từ xa. Nhánh đó đã được cập nhật lên commit `C2`, nên Git từ chối lệnh đẩy của bạn"
], ],
"command": "git push", "command": "git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -1957,7 +1957,7 @@ exports.level = {
"Nào bây giờ trước push ta dùng rebase thì..." "Nào bây giờ trước push ta dùng rebase thì..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Bùùm! Ta đã cập nhật nhánh từ xa trong kho chứ cục bộ với `git fetch`, dịch chuyển thành quả của mình để phản ánh thay đổi mới của kho chứa từ xa, sau đó đẩy chúng lên với `git push`." "Bùùm! Ta đã cập nhật nhánh từ xa trong kho chứa cục bộ với `git fetch`, dịch chuyển thành quả của mình để phản ánh thay đổi mới của kho chứa từ xa, sau đó đẩy chúng lên với `git push`."
], ],
"command": "git fetch; git rebase o/main; git push", "command": "git fetch; git rebase o/main; git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -1969,7 +1969,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"Có cách nào khác để cập nhật thành quả của mình khi kho chứa từ xa được cập nhật không? Tất nhiên rồi! Hãy xem xét điều tương tự với `merge`.", "Có cách nào khác để cập nhật thành quả của mình khi kho chứa từ xa được cập nhật không? Tất nhiên rồi! Hãy xem xét điều tương tự với `merge`.",
"", "",
"Mặc dù `git merge` không dịch chuyển commit của bạn (thay vì đó nó tạo ra một commit hơp nhất), đó là cách để nói với git rằng bạn đã kết hợp tất cả thay đổi từ nhánh từ xa. Đó là bởi vì bây giờ nhánh từ xa đã trở thành một *tổ tiên* của nhánh cục bộ của bạn, nghĩa là commit của bạn có thể tham chiếu điến tất cả commit có ở nhánh tù xa.", "Mặc dù `git merge` không dịch chuyển commit của bạn (thay vì đó nó tạo ra một commit hợp nhất), đó là cách để nói với Git rằng bạn đã kết hợp tất cả thay đổi từ nhánh từ xa. Đó là bởi vì bây giờ nhánh từ xa đã trở thành một *tổ tiên* của nhánh cục bộ của bạn, nghĩa là commit của bạn có thể tham chiếu đến tất cả commit có ở nhánh từ xa.",
"", "",
"Hãy xem qua bản biểu diễn sau..." "Hãy xem qua bản biểu diễn sau..."
] ]
@ -1982,7 +1982,7 @@ exports.level = {
"Giờ nếu ta dùng merge thay vày rebase thì..." "Giờ nếu ta dùng merge thay vày rebase thì..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Bùùm! Ta đã cập nhật đại diện nhánh từ xa tại kho chứa địa phương với `git fetch`, *hợp nhất* (*merge*) thành quả mới vào thành quả của ta (để phản ánh thay đổi ở nhánh từ xa), sau đó đẩy chúng lên với `git push`." "Bùùm! Ta đã cập nhật đại diện nhánh từ xa tại kho chứa cục bộ với `git fetch`, *hợp nhất* (*merge*) thành quả mới vào thành quả của ta (để phản ánh thay đổi ở nhánh từ xa), sau đó đẩy chúng lên với `git push`."
], ],
"command": "git fetch; git merge o/main; git push", "command": "git fetch; git merge o/main; git push",
"beforeCommand": "git clone; git fakeTeamwork; git commit" "beforeCommand": "git clone; git fakeTeamwork; git commit"
@ -2036,7 +2036,7 @@ exports.level = {
"", "",
"* Nhân bản kho chứa của bạn", "* Nhân bản kho chứa của bạn",
"* Giả lập làm việc nhóm (1 commit)", "* Giả lập làm việc nhóm (1 commit)",
"* Tạo ra 1 commit địa phương", "* Tạo ra 1 commit cục bộ",
"* Xuất bản thành quả của bạn dùng *rebase*" "* Xuất bản thành quả của bạn dùng *rebase*"
] ]
} }

View file

@ -17,7 +17,7 @@ exports.level = {
"es_AR": "Crea la rama feature desde la rama main en local antes de restablecerlo para que sea el mismo que la rama main de origen.", "es_AR": "Crea la rama feature desde la rama main en local antes de restablecerlo para que sea el mismo que la rama main de origen.",
"ja": "mainブランチをoriginのmainと同じ状態になるようにリセットする前に、ローカルのmainからfeatureブランチを作成します。", "ja": "mainブランチをoriginのmainと同じ状態になるようにリセットする前に、ローカルのmainからfeatureブランチを作成します。",
"pl": "Stwórz boczną gałąź tematyczną (feature) z lokalnego main, a późnej zsynchronizuj ją z main na origin", "pl": "Stwórz boczną gałąź tematyczną (feature) z lokalnego main, a późnej zsynchronizuj ją z main na origin",
"vi": "Tạo những nhánh tính năng từ nhánh địa phương trước khi trả chúng về lại giống như o/main", "vi": "Tạo những nhánh tính năng từ nhánh cục bộ trước khi trả chúng về lại giống như o/main",
"it_IT": "Crea il ramo per la feature a partire dal main locale prima di resettarlo al pari del main remoto" "it_IT": "Crea il ramo per la feature a partire dal main locale prima di resettarlo al pari del main remoto"
}, },
"name": { "name": {
@ -620,7 +620,7 @@ exports.level = {
"## Kết nối remote bị từ chối!", "## Kết nối remote bị từ chối!",
"", "",
"Nếu bạn làm việc trong một nhóm cộng tác lớn, có khả năng nhánh main bị khóa và yêu cầu một số quy" + "Nếu bạn làm việc trong một nhóm cộng tác lớn, có khả năng nhánh main bị khóa và yêu cầu một số quy" +
" trình Pull Request để hợp nhất các thay đổi. Nếu bạn commit trực tiếp với nhánh địa phương và thử" + " trình Pull Request để hợp nhất các thay đổi. Nếu bạn commit trực tiếp với nhánh cục bộ và thử" +
" push, bạn sẽ được chào đón bằng một thông báo tương tự như sau:", " push, bạn sẽ được chào đón bằng một thông báo tương tự như sau:",
"", "",
"```", "```",
@ -633,12 +633,12 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## Why was it rejected?", "## Tại sao bị từ chối?",
"", "",
"Remote từ chối push các commit trực tiếp đến main vì chính sách của main yêu cầu các pull" + "Remote từ chối push các commit trực tiếp đến main vì chính sách của main yêu cầu các pull" +
" request được sử dụng thay thế.", " request được sử dụng thay thế.",
"", "",
"You meant to follow the process creating a branch then pushing that branch and doing a pull request, but you forgot and committed directly to main. Now you are stuck and cannot push your changes." "Bạn định tạo một nhánh sau đó đẩy nhánh lên rồi thực hiện pull request theo đúng quy trình, tuy nhiên bạn lại lỡ tay commit trực tiếp vào nhánh main. Bây giờ bạn bị mắc kẹt và không thể đẩy các thay đổi của mình lên."
] ]
} }
}, },
@ -646,11 +646,11 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"## The solution", "## Giải pháp",
"", "",
"Tạo một nhánh khác được gọi là feature và push nhánh đó đến remote. Đồng thời đặt lại nhánh main" + "Tạo một nhánh khác được gọi là feature và push nhánh đó đến remote. Đồng thời đặt lại nhánh main" +
" của bạn để đồng bộ với remote, nếu không bạn có thể gặp sự cố vào lần tiếp theo khi bạn thực hiện" + " của bạn để đồng bộ với remote, nếu không bạn có thể gặp sự cố vào lần tiếp theo khi bạn thực hiện" +
" pull và commit của người khác xung đột với bạn." " pull và commit của người khác xung đột với của bạn."
] ]
} }
} }

View file

@ -635,9 +635,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Tại sao không hợp nhất?", "## Tại sao không hợp nhất?",
"", "",
"Để có thể đẩy cập nhật của bạn lên kho nhánh từ xa, tất cả những gì bạn cần làm là *kết nạp* thay đổi mới nhất từ nhánh từ xa. Nghĩa là bạn có thể dùng tái bố trí *hoặc* hợp nhất với nhánh từ xa (ví dụ `o/main`).", "Để có thể đẩy cập nhật của bạn lên kho nhánh từ xa, tất cả những gì bạn cần làm là *kết nạp* thay đổi mới nhất từ nhánh từ xa. Nghĩa là bạn có thể dùng rebase *hoặc* merge với nhánh từ xa (ví dụ `o/main`).",
"", "",
"Vậy ta có thể sử dụng một trong 2 cách, thì tại sao đến giờ ta chỉ tập trung vào tái bố trí trong các bài học? Tại sao khi làm việc với nhánh từ xa lại ta lại không thích `hợp nhất` (`merge`)?", "Vậy ta có thể sử dụng một trong 2 cách, thì tại sao đến giờ ta chỉ tập trung vào rebase trong các bài học? Tại sao khi làm việc với nhánh từ xa lại ta lại không thích `hợp nhất` (`merge`)?",
"" ""
] ]
} }
@ -646,19 +646,19 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Trong cộng đồng phát triền phần mềm có rất nhiều tranh luận về ưu, nhươc, khuyết của việc sử dụng tái bố trí(`rebase`) hay hợp nhất(`merge`). Dưới đây là một vài ưu / nhược cơ bản của tái bố trí:", "Trong cộng đồng phát triển phần mềm có rất nhiều tranh luận về ưu, nhược, khuyết của việc sử dụng tái bố trí (`rebase`) hay hợp nhất (`merge`). Dưới đây là một vài ưu / nhược cơ bản của rebase:",
"", "",
"Ưu điểm:", "Ưu điểm:",
"", "",
"* Tái bố trí làm cây commit của bạn trông gọn gàng hơn nhiều vì mọi thứ được xếp theo đường thẳng", "* Rebase làm cây commit của bạn trông gọn gàng hơn nhiều vì mọi thứ được xếp theo đường thẳng",
"", "",
"Nhược điểm:", "Nhược điểm:",
"", "",
"* Tái bố trí sửa đổi lịch sử (biểu hiện) của cây commit.", "* Rebase sửa đổi lịch sử của cây commit.",
"", "",
"Ví dụ, commit `C1` có thể bố trí lên *sau* `C3`. Thế là `C1'` biểu hiện như là nó xuất hiện sau `C3` trong khi thực tế nó được hoàn thành trước đó.", "Ví dụ, commit `C1` có thể bố trí lên *sau* `C3`. Thế là `C1'` biểu hiện như là nó xuất hiện sau `C3` trong khi thực tế nó được hoàn thành trước đó.",
"", "",
"Có những nhà phát triển muốn tôn trọng tính lịch sự nên họ ưa thích hợp nhất hơn. Những người khác (như tôi chẳng hạn) thì thiên về tái bố trí hơn vì muốn có cây commit gọn gàng. Rốt cục cũng là thiên hướng thôi :D" "Một số nhà phát triển thích lưu giữ lịch sử nên họ ưa thích merge hơn. Những người khác (như tôi chẳng hạn) thì thiên về rebase hơn vì muốn có cây commit gọn gàng. Rốt cuộc cũng chỉ phụ thuộc vào sở thích cá nhân thôi :D"
] ]
} }
}, },
@ -666,7 +666,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Ở cấp độ này, hãy thử giải bài tập trước nhưng mà với *hợp nhất*. Có lẽ bài này hơi thừa nhưng mà nó mịnh họa quan điểm trên rõ ràng hơn." "Ở cấp độ này, hãy thử giải bài tập trước đó nhưng dùng *hợp nhất*. Có lẽ bài này hơi thừa nhưng mà nó minh họa quan điểm trên rõ ràng hơn."
] ]
} }
} }

View file

@ -816,16 +816,16 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Pull", "## Git Pull",
"", "",
"Ta đã biết cách dùng `git fetch` để nạp các commit từ kho chứa từ xa, giờ hãy cập nhật các commit này vào các nhánh địa phương!", "Ta đã biết cách dùng `git fetch` để nạp các commit từ kho chứa từ xa, giờ hãy cập nhật công việc của chúng ta để phản ánh những thay đổi đó!",
"", "",
"Thực ra thì có nhiều cách đề làm điều này -- một khi bạn đã có các commit này ở ko chứa địa phương, bạn có thể hợp nhất chúng như với các commit ở các nhánh khác. Nghĩa là bạn có thể sử dụng các câu lệnh sau:", "Thực ra thì có nhiều cách đề làm điều này -- một khi bạn đã có các commit này ở kho chứa cục bộ, bạn có thể hợp nhất chúng như với các commit ở các nhánh khác. Nghĩa là bạn có thể sử dụng các câu lệnh sau:",
"", "",
"* `git cherry-pick o/main`", "* `git cherry-pick o/main`",
"* `git rebase o/main`", "* `git rebase o/main`",
"* `git merge o/main`", "* `git merge o/main`",
"* etc., etc.", "* vân vân và mây mây",
"", "",
"Thực tế thì, quá trình *nạp* commit từ kho chứa từ xa và *hợp nhất* chúng phổ biết đến nỗi git cung cấp một câu lệnh để làm cả 2 điều này một lúc! Đó là `git pull`." "Thực tế thì, quá trình *nạp* commit từ kho chứa từ xa và *hợp nhất* chúng phổ biết đến nỗi Git cung cấp một câu lệnh để làm cả 2 điều này một lúc! Đó là `git pull`."
] ]
} }
}, },
@ -859,9 +859,9 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Ta sẽ tìm hiu chi tiết về `git pull` sau (bao gồm các tùy chọn và tham số), còn bây giờ thì cứ dùng thử nó ở cấp độ này đã.", "Ta sẽ tìm hiu chi tiết về `git pull` sau (bao gồm các tùy chọn và tham số), còn bây giờ thì cứ dùng thử nó ở cấp độ này đã.",
"", "",
"Nhớ rằng -- bạn có thể giải quyết cấp độ này với `fetch` và sau đó `merge`, nhưng mà như thế thì lại tốn têm một câu lệnh :P" "Nhớ rằng -- bạn có thể giải quyết cấp độ này với `fetch` và sau đó `merge`, nhưng mà như thế thì lại tốn thêm một câu lệnh :P"
] ]
} }
} }

View file

@ -35,7 +35,7 @@ exports.level = {
"ru_RU": "Напоминаю, что новые ветки можно создавать и с помощью команд fetch/pull", "ru_RU": "Напоминаю, что новые ветки можно создавать и с помощью команд fetch/pull",
"ko": "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요.", "ko": "fetch/pull 과 인자들로 새 로컬 브랜치를 생성할수 있다는것을 기억하세요.",
"uk": "Пам'ятай, що ти можеш створювати нові гілки, використовуючи fetch/pull з аргументами", "uk": "Пам'ятай, що ти можеш створювати нові гілки, використовуючи fetch/pull з аргументами",
"vi": "Nhớ rằng,bạn có thể tạo nhánh cục bộ mới với tham số của fetch/pull", "vi": "Nhớ rằng, bạn có thể tạo nhánh cục bộ mới với tham số của fetch/pull",
"sl_SI": "Zapomni si, da lahko ustvariš nove lokalne branche s fetch/pull argumenti.", "sl_SI": "Zapomni si, da lahko ustvariš nove lokalne branche s fetch/pull argumenti.",
"pl": "Pamiętaj, że za pomocą argumentów fetch/pull możesz tworzyć nowe lokalne gałęzie", "pl": "Pamiętaj, że za pomocą argumentów fetch/pull możesz tworzyć nowe lokalne gałęzie",
"it_IT": "Ricorda che puoi creare nuovi rami locali sfruttando fetch/pull + parametri" "it_IT": "Ricorda che puoi creare nuovi rami locali sfruttando fetch/pull + parametri"
@ -1032,7 +1032,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Dưới đây là một vài câu lệnh tương đồng nhau trong git:", "Dưới đây là một vài câu lệnh tương đồng nhau trong Git:",
"", "",
"`git pull origin foo` tương đương với:", "`git pull origin foo` tương đương với:",
"", "",
@ -1057,7 +1057,7 @@ exports.level = {
"Nếu ta chỉ định vị trí để nạp, mọi thứ diễn ra như với git fetch nhưng giờ đây có thêm một bước đó là ta hợp nhất những gì mà ta đã nạp" "Nếu ta chỉ định vị trí để nạp, mọi thứ diễn ra như với git fetch nhưng giờ đây có thêm một bước đó là ta hợp nhất những gì mà ta đã nạp"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Thấy chứ! Bằng cách chỉ định nhánh `main` ta tải các commit xuống nhánh `o/main` như thường lệ. Sau đó hợp nhất nhánh `o/main` vào nhánh cục bộ mà ta đang đứng, nhánh mà *không phải* nhánh cục bộ `main`. Nhờ vậy mà ta có thể chạy cùng một lệnh git pull(với cùng tham số) nhiều lần ở những vị trí khác nhau để áp dụng cùng cập nhật lên các nhánh khác nhau." "Thấy chứ! Bằng cách chỉ định nhánh `main` ta tải các commit xuống nhánh `o/main` như thường lệ. Sau đó hợp nhất nhánh `o/main` vào nhánh cục bộ mà ta đang đứng, nhánh mà *không phải* nhánh cục bộ `main`. Nhờ vậy mà ta có thể chạy cùng một lệnh git pull (với cùng tham số) nhiều lần ở những vị trí khác nhau để áp dụng cùng cập nhật lên các nhánh khác nhau."
], ],
"command": "git pull origin main", "command": "git pull origin main",
"beforeCommand": "git clone; go -b bar; git commit; git fakeTeamwork" "beforeCommand": "git clone; go -b bar; git commit; git fakeTeamwork"

View file

@ -603,15 +603,15 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Git Push", "## Git Push",
"", "",
"Được rồi, ta đã biết cách nạp thay đổi từ kho chứa từ xa và kết hợp chúng vào các nhánh cục bộ. Khá là tuyệt rồi... nhưng nếu tôi muốn chia sẻ tác phẩm tuyệt vời _của tôi_ với mọi người khác thì sao?", "Được rồi, ta đã biết cách nạp thay đổi từ kho chứa từ xa và kết hợp chúng vào các nhánh cục bộ. Khá là tuyệt rồi... nhưng nếu tôi muốn chia sẻ tác phẩm tuyệt vời _của tôi_ với mọi người thì sao?",
"", "",
"Chà, cách tải lên thì phải ngược với tải xuống rồi. Vậy thì đối nghịch của `git pull`(kéo) là gì? `git push`(đẩy)!", "Chà, cách tải lên thì phải ngược với tải xuống rồi. Vậy thì đối nghịch của `git pull` (kéo) là gì? `git push` (đẩy)!",
"", "",
"`git push` có trách nhiệm tải lên thay đổi _của bạn_ vào nhánh từ xa được chỉ định và cập nhật nhánh đó để kết hợp với commit đẩy lên của bạn. Một khi lệnh `git push` hoàn thành, tất cả bạn bè của bạn có thể tải xuống thay đổi của nhánh từ xa đó đó.", "`git push` có trách nhiệm tải lên thay đổi _của bạn_ vào nhánh từ xa được chỉ định và cập nhật nhánh đó để kết hợp với commit đẩy lên của bạn. Một khi lệnh `git push` hoàn thành, tất cả bạn bè của bạn có thể tải xuống thay đổi của nhánh từ xa đó đó.",
"", "",
"Bạn có thể xem `git push` là câu lệnh để \"xuất bản\" thành quả công việc của bạn. Lệnh này có nhiều tính năng tinh tế mà ta sẽ tìm hiểu nhanh thôi, nhưng giờ hãy cứ bắt đầu với từng bước nhỏ đã...", "Bạn có thể xem `git push` là câu lệnh để \"xuất bản\" thành quả công việc của bạn. Lệnh này có nhiều tính năng tinh tế mà ta sẽ tìm hiểu nhanh thôi, nhưng giờ hãy cứ bắt đầu với từng bước nhỏ đã...",
"", "",
"*lưu ý --`git push` mà không có tham số hành xử tùy biến phụ thuộc vào cài đặt của git là `push.default`. Giá trị mặc định cho cài đặt này phụ thuộc vào phiên bản git mà bạn đang sử dụng, còn ở bài học của chúng ta thì ta sẽ sử dụng giá trị `upstream` (ngược dòng). Bây giờ thì đó chưa phải là vấn đề gì lớn, nhưng chúng tôi khuyến nghị bạn kiểm tra cài đặt của mình trước khi đẩy lên dự án của bạn.*" "*lưu ý --`git push` mà không có tham số hành xử tùy biến phụ thuộc vào cài đặt của Git là `push.default`. Giá trị mặc định cho cài đặt này phụ thuộc vào phiên bản Git mà bạn đang sử dụng, còn ở bài học của chúng ta thì ta sẽ sử dụng giá trị `upstream` (ngược dòng). Bây giờ thì đó chưa phải là vấn đề gì lớn, nhưng chúng tôi khuyến nghị bạn kiểm tra cài đặt của mình trước khi đẩy lên dự án của bạn.*"
] ]
} }
}, },

View file

@ -1007,11 +1007,11 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Tham số đẩy", "## Tham số đẩy",
"", "",
"Tuyệt! Bạn đã biết đến theo dõi từ xa, giờ thì ta có thể tìm hiểu sâu hơn về cách hoạt động của đẩy( `git push`), tìm nạp(`git fetch`) và kéo(`git pull`). Ta sẽ giải quyết từng câu lệnh một nhưng về căn bản chúng khá là giống nhau.", "Tuyệt! Bạn đã biết đến theo dõi từ xa, giờ thì ta có thể tìm hiểu sâu hơn về cách hoạt động của đẩy (`git push`), tìm nạp (`git fetch`) và kéo (`git pull`). Ta sẽ giải quyết từng câu lệnh một nhưng về căn bản chúng khá là giống nhau.",
"", "",
"Trước hết hãy xem qua `git push`. Trong bài học về theo dõi từ xa bạn đã biết rằng git sử dụng thuộc tính(nhánh từ xa mà nó \"theo dõi\") của nhánh hiện tại để xác định kho và nhánh từ xa để đẩy. Git làm việc này mà không cần tham số chỉ định, nhưng lệnh git push có thể thêm tham số dưới dạng sau:", "Trước hết hãy xem qua `git push`. Trong bài học về theo dõi từ xa bạn đã biết rằng Git sử dụng thuộc tính (nhánh từ xa mà nó \"theo dõi\") của nhánh hiện tại để xác định kho và nhánh từ xa để đẩy. Git làm việc này mà không cần tham số chỉ định, nhưng lệnh git push có thể thêm tham số dưới dạng sau:",
"", "",
"`git push <tên kho từ xa> <vị trí>`", "`git push <tên kho chứa từ xa> <vị trí>`",
"", "",
"" ""
] ]
@ -1021,7 +1021,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Tham số `<vị trí>` là gì vậy? Chúng ta sẽ đi sâu vào chi tiết sau sau, hãy xem ví dụ trước. Đưa ra câu lệnh:", "Tham số `<vị trí>` là gì vậy? Chúng ta sẽ đi sâu vào chi tiết sau, hãy xem ví dụ trước. Câu lệnh:",
"", "",
"`git push origin main`", "`git push origin main`",
"", "",
@ -1029,9 +1029,9 @@ exports.level = {
"", "",
"*Chuyển sang nhánh \"main\" trong kho lưu trữ cục bộ, nhận tất cả các commit và tìm nhánh \"main\" trong kho chứa từ xa tên là \"origin\". Thêm tất cả các commit không có trong nhánh đó và báo cho tôi biết khi nào hoàn tất.*", "*Chuyển sang nhánh \"main\" trong kho lưu trữ cục bộ, nhận tất cả các commit và tìm nhánh \"main\" trong kho chứa từ xa tên là \"origin\". Thêm tất cả các commit không có trong nhánh đó và báo cho tôi biết khi nào hoàn tất.*",
"", "",
"Bằng cách chỉ định `main` trong tham số \"vị trí\",ta báo với git nơi mà commit *xuất phát* và nơi chúng *sẽ đến*. Về căn bản nó là \"địa điểm\" để đồng bộ hóa 2 kho chứa.", "Bằng cách chỉ định `main` trong tham số \"vị trí\", ta báo với Git nơi mà commit *xuất phát* và nơi chúng *sẽ đến*. Về căn bản nó là \"địa điểm\" để đồng bộ hóa 2 kho chứa.",
"", "",
"Lưu ý rằng ta ta đã thông báo cho gi tất cả thông tin cần thiết( thông qua chỉ định 2 tham số), nó sẽ không quan tâm nhánh mà ta đang đứng!" "Lưu ý rằng ta đã thông báo cho Git tất cả thông tin cần thiết (thông qua chỉ định 2 tham số), nó sẽ không quan tâm nhánh mà ta đang đứng!"
] ]
} }
}, },

View file

@ -973,9 +973,9 @@ exports.level = {
"", "",
"Có thể bạn sẽ thắng mắc -- Nếu như ta muốn nguồn và đích khác đi thì sao? Nếu như ta muốn đẩy commit từ nhánh cục bộ `foo` lên nhánh từ xa `bar` thì sao?", "Có thể bạn sẽ thắng mắc -- Nếu như ta muốn nguồn và đích khác đi thì sao? Nếu như ta muốn đẩy commit từ nhánh cục bộ `foo` lên nhánh từ xa `bar` thì sao?",
"", "",
"Chà đáng tiếc là điều này là bất khả thi tron git... đùa thôi! Tất nhiên là làm được chứ :)... git có nhiều và rất nhiều lựa chọn linh động(có lẽ là quá nhiều)", "Chà đáng tiếc là điều này là bất khả thi tron Git... đùa thôi! Tất nhiên là làm được chứ :)... Git có nhiều và rất nhiều lựa chọn linh động (có lẽ là quá nhiều)",
"", "",
"Hãy xem cách nó hoạt động ..." "Hãy xem cách nó hoạt động..."
] ]
} }
}, },
@ -987,7 +987,7 @@ exports.level = {
"", "",
"`git push origin <nguồn>:<đích>`", "`git push origin <nguồn>:<đích>`",
"", "",
"Giá trị thực của tham số này là một refspec, \"refspec\" là một từ tự tạo, nghĩa là một vị trí được Git nhận ra (chẳng hạn như nhánh `foo` hoặc` HEAD ~ 1`).", "Giá trị thực của tham số này là một refspec, \"refspec\" là một từ tự tạo, nghĩa là một vị trí Git có thể nhận ra (chẳng hạn như nhánh `foo` hoặc `HEAD ~ 1`).",
"", "",
"Một khi bạn đã chỉ định các nguồn và đích độc lập, bạn có thể thao tác với kho chứa từ xa một cách khá thú vị và chính xác, hãy xem bản demo!" "Một khi bạn đã chỉ định các nguồn và đích độc lập, bạn có thể thao tác với kho chứa từ xa một cách khá thú vị và chính xác, hãy xem bản demo!"
] ]
@ -997,10 +997,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Nhớ rằng, `nguồn` là bất kỳ vị trí nào mà git hiểu:" "Nhớ rằng, `nguồn` là bất kỳ vị trí nào mà Git hiểu:"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Wao! Lệnh này khá phức tạp, nhưng mà hợp lý -- git diễn giải `foo^` thành một vị trí, tải lên tất cả các commit từ đó trở về trước mà chưa có trên nhánh đích rồi cập nhật nó." "Wao! Lệnh này khá phức tạp, nhưng mà hợp lý -- Git diễn giải `foo^` thành một vị trí, tải lên tất cả các commit từ đó trở về trước mà chưa có trên nhánh đích rồi cập nhật nó."
], ],
"command": "git push origin foo^:main", "command": "git push origin foo^:main",
"beforeCommand": "git clone; go -b foo; git commit; git commit" "beforeCommand": "git clone; go -b foo; git commit; git commit"
@ -1010,10 +1010,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Nếu như đích đến mà bạn muốn không tồn tại thì sao? Chẳng sao cả! Đơn giản hãy gõ tên nhánh và git sẽ tạo nhánh đó trên kho chứa từ xa cho bạn." "Nếu như đích đến mà bạn muốn không tồn tại thì sao? Chẳng sao cả! Đơn giản hãy gõ tên nhánh và Git sẽ tạo nhánh đó trên kho chứa từ xa cho bạn."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Tuyệt vời, thấy git thú vị không :D" "Tuyệt vời, thấy Git thú vị không :D"
], ],
"command": "git push origin main:newBranch", "command": "git push origin main:newBranch",
"beforeCommand": "git clone; git commit" "beforeCommand": "git clone; git commit"

View file

@ -16,7 +16,7 @@ exports.level = {
"ru_RU": "Помни - ты всегда можешь отменить команды с помощью undo или reset", "ru_RU": "Помни - ты всегда можешь отменить команды с помощью undo или reset",
"ko": "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요", "ko": "명령어를 undo와 reset으로 되돌릴 수 있다는 것을 잊지마세요",
"uk": "Пам'ятай, ти в будь-який момент можеш використовувати команди undo або reset", "uk": "Пам'ятай, ти в будь-який момент можеш використовувати команди undo або reset",
"vi": "Nhớ rằng bạn luôn luôn có thể hoàn tác hoặc soạn lại câu lệnh ", "vi": "Nhớ rằng bạn luôn luôn có thể hoàn tác hoặc soạn lại câu lệnh",
"sl_SI": "Vedno lahko razveljaviš ukaz ali ponastaviš stopnjo.", "sl_SI": "Vedno lahko razveljaviš ukaz ali ponastaviš stopnjo.",
"pl": "Pamiętaj, że zawsze możesz skorzystać z poleceń undo i reset", "pl": "Pamiętaj, że zawsze możesz skorzystać z poleceń undo i reset",
"it_IT": "Ricorda che puoi sempre usare i comandi undo e reset" "it_IT": "Ricorda che puoi sempre usare i comandi undo e reset"
@ -741,7 +741,7 @@ exports.level = {
"", "",
"Giờ thì bạn đã quen thuộc với tìm nạp, kéo và đẩy, bây giờ chúng tôi sẽ kiểm tra kỹ năng của bạn với một quy trình làm việc mới.", "Giờ thì bạn đã quen thuộc với tìm nạp, kéo và đẩy, bây giờ chúng tôi sẽ kiểm tra kỹ năng của bạn với một quy trình làm việc mới.",
"", "",
"Trong các dự án lớn, các nhà phát triển thường làm việc trên các nhánh tính năng (được phân nhánh từ `main`) và chỉ thực hiện tích hợp sau khi công việc hoàn thành. Điều này tương tự như mô tả trong bài học trước (đẩy nhánh bên sang kho lưu trữ từ xa), nhưng chúng ta sẽ đi sâu hơn một chút trong phần này.", "Trong các dự án lớn, các nhà phát triển thường làm việc trên các nhánh tính năng (feature branch) (được phân nhánh từ `main`) và chỉ thực hiện tích hợp sau khi công việc hoàn thành. Điều này tương tự như mô tả trong bài học trước (đẩy nhánh bên sang kho lưu trữ từ xa), nhưng chúng ta sẽ đi sâu hơn một chút trong phần này.",
"", "",
"Một vài nhà phát triển chỉ thực hiện đẩy và kéo khi ở trên nhánh `main` -- như vậy thì nhánh `main` luôn luôn được cập nhật với nhánh từ xa (`o/main`).", "Một vài nhà phát triển chỉ thực hiện đẩy và kéo khi ở trên nhánh `main` -- như vậy thì nhánh `main` luôn luôn được cập nhật với nhánh từ xa (`o/main`).",
"", "",
@ -774,9 +774,9 @@ exports.level = {
"markdowns": [ "markdowns": [
"Cấp độ này khá là phức tạp đấy -- để hoàn thành thì hãy xem qua hướng dẫn cơ bản sau:", "Cấp độ này khá là phức tạp đấy -- để hoàn thành thì hãy xem qua hướng dẫn cơ bản sau:",
"", "",
"* Có 3 nhánh chức năng là -- `side1` `side2` vả `side3`", "* Có 3 nhánh chức năng là -- `side1`, `side2` và `side3`",
"* Chúng tôi muốn bạn đẩy từng nhánh chức năng, theo thứ tự, lên nhánh từ xa", "* Chúng tôi muốn bạn đẩy từng nhánh chức năng, theo thứ tự, lên nhánh từ xa",
"* Nhánh từ xa cũng đã được cập nhật, nên ta cũng cần sát nhập thay đổi đó nữa", "* Nhánh từ xa cũng đã được cập nhật, nên ta cũng cần sáp nhập thay đổi đó nữa",
"", "",
":O khoai đây! Cố lên nhé, hoàn thành cấp độ này là lên trình nhiều lắm đấy." ":O khoai đây! Cố lên nhé, hoàn thành cấp độ này là lên trình nhiều lắm đấy."
] ]

View file

@ -846,11 +846,13 @@ exports.level = {
"", "",
"Giờ bạn đã thấy cách thức hoạt động của `git clone`, cùng xem xét kỹ hơn những gì đã xảy ra.", "Giờ bạn đã thấy cách thức hoạt động của `git clone`, cùng xem xét kỹ hơn những gì đã xảy ra.",
"", "",
"Điều đầu tiên mà có thể bạn để ý là một nhánh mới xuất hiện trong kho chứa địa phương của ta là `o/main`. Loại nhánh này được gọi là nhánh _từ xa_ (_remote_) ; nhánh từ xa có những thuộc tính đặc biệt vì chúng phục vụ những mục đích duy nhất.", "Điều đầu tiên mà có thể bạn để ý là một nhánh mới xuất hiện trong kho chứa cục bộ của ta là `o/main`. Loại nhánh này được gọi là nhánh _từ xa_ (_remote_); nhánh từ xa có những thuộc tính đặc biệt vì chúng phục vụ một mục đích duy nhất.",
"", "",
"Nhánh từ xa phản ánh _trạng thái_ (_state_) của kho chứa từ xa (kể từ lần cuối cùng bạn tương tác với kho chứa từ xa). Chúng giúp bạn hiểu về sự khác biệt giữa công c trên kho chứa cục bộ với kho chứa từ xa -- một bước quan trọng trước khi chia sẻ công việc của bạn với người khác.", "Nhánh từ xa phản ánh _trạng thái_ (_state_) của kho chứa từ xa (kể từ lần cuối cùng bạn tương tác với kho chứa từ xa). Chúng giúp bạn hiểu về sự khác biệt giữa công việc trên kho chứa cục bộ với kho chứa từ xa -- một bước quan trọng trước khi chia sẻ công việc của bạn với người khác.",
"", "",
"Nhánh từ xa có một thuộc tính đặc biệt đó là khi bạn chuyển sang chúng bạn sẽ vào trạng thái tách rời `HEAD`. Git chủ tâm làm việc này vì bạn không thể công tác trực tiếp trên chúng; bạn phải công tác ở nơi khác và chia sẻ thành quả lên kho chứa từ xa (sau đó nhánh từ xa sẽ được cập nhật)." "Nhánh từ xa có một thuộc tính đặc biệt đó là khi bạn chuyển sang chúng, bạn sẽ vào trạng thái tách rời `HEAD`. Mục đích của Git là để bạn không thể làm việc trực tiếp trên nhánh từ xa; bạn phải làm việc ở nơi khác và chia sẻ thành quả lên kho chứa từ xa (sau đó nhánh từ xa sẽ được cập nhật).",
"",
"Nói rõ một chút: Các nhánh từ xa nằm trên kho lưu trữ cục bộ của bạn, không phải trên kho lưu trữ từ xa."
] ]
} }
}, },
@ -858,17 +860,17 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"###`o/` là gì vậy?", "### `o/` là gì vậy?",
"", "",
"Có thể bạn sẽ thắc mắc về ký tự `o/` ở đầu tên nhánh từ xa có ý nghĩa gì. Chà, tên nhánh từ xa cũng có (thiết yếu) quy tắc đặt tên -- chúng được hiển thị dưới dạng:", "Có thể bạn sẽ thắc mắc về ký tự `o/` ở đầu tên nhánh từ xa có ý nghĩa gì. Chà, tên nhánh từ xa cũng có (ràng buộc) quy tắc đặt tên -- chúng được hiển thị dưới dạng:",
"", "",
"* `<tên kho từ xa>/<tên nhánh>`", "* `<tên kho chứa từ xa>/<tên nhánh>`",
"", "",
"Do đó, ở trong `o/main` thì `main` là tên nhánh còn `o` là tên kho chứa từ xa.", "Do đó, đối với `o/main` thì `main` là tên nhánh còn `o` là tên kho chứa từ xa.",
"", "",
"Thực tế thì hầu hết các nhà phát triển đặt tên kho chứa từ xa là `origin` chứ không phải `o`. Nó trở thành thông lệ đến nỗi Git đặt tên `origin` cho kho chứa từ xa khi bạn dùng `git clone` để sao chép một kho chứa.", "Thực tế thì hầu hết các nhà phát triển đặt tên kho chứa từ xa là `origin` chứ không phải `o`. Nó trở thành thông lệ đến nỗi Git đặt tên `origin` cho kho chứa từ xa khi bạn dùng `git clone` để sao chép một kho chứa.",
"", "",
"Đáng tiêc là `origin` không khớp trong giao diện của chúng tôi, nên chúng tôi đành phải viết tắt là `o` :( Nhưng hãy nhớ rằng khi dùng git thật sự thì chắc hẳn tên của kho chứa từ xa sẽ là `origin`!", "Đáng tiếc là `origin` không khớp trong giao diện của chúng tôi, nên chúng tôi đành phải viết tắt là `o` :( Nhưng hãy nhớ rằng khi dùng Git thật sự thì chắc hẳn tên của kho chứa từ xa sẽ là `origin`!",
"", "",
"Lý thuyết hơi nhiều rồi, đi vào thực hành thôi." "Lý thuyết hơi nhiều rồi, đi vào thực hành thôi."
] ]
@ -878,10 +880,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Hãy thử chuyển sang nhánh từ xa xem điu gì xảy ra." "Hãy thử chuyển sang nhánh từ xa xem điu gì xảy ra."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Như bạn thấy, git đưa ta vào trạng thái `HEAD` và không cập nhật nhánh `o/main` khi ta thêm một commit. Đó là bởi vì `o/main` chỉ cập nhật khi kho chứa từ xa được cập nhật." "Như bạn thấy, Git đưa ta vào trạng thái tách rời `HEAD` và không cập nhật nhánh `o/main` khi ta thêm một commit. Đó là bởi vì `o/main` chỉ cập nhật khi kho chứa từ xa cập nhật."
], ],
"command": "git checkout o/main; git commit", "command": "git checkout o/main; git commit",
"beforeCommand": "git clone" "beforeCommand": "git clone"
@ -891,7 +893,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Để hoàn thành cấp độ này, commit một lần trên `main` và một lần nữa sau khi chuyển sang `o/main`. Điều nãy sẽ giúp ta hiểu cách nhánh từ xa hành xử, chúng chỉ cập nhật để phản ánh trạng thái của kho chứa từ xa." "Để hoàn thành cấp độ này, commit một lần trên `main` và một lần nữa sau khi chuyển sang `o/main`. Điều này sẽ giúp ta hiểu cách nhánh từ xa hành xử, chúng chỉ cập nhật để phản ánh trạng thái của kho chứa từ xa."
] ]
} }
} }

View file

@ -748,7 +748,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Sự kỳ quặc của `<nguồn>`", "### Sự kỳ quặc của `<nguồn>`",
"", "",
"Git lợi dụng tham số `<nguồn>` theo 2 cách khá dị.Hai cách lợi dụng này bắt nguồn từ thục tế là bạn có thể \"không chỉ định\" `nguồn` cho cả git push và git fetch. Bạn có thể làm điều này bằng cách để trống tham số như sau:", "Git lợi dụng tham số `<nguồn>` theo 2 cách khá dị. Hai cách lợi dụng này bắt nguồn từ thực tế là bạn có thể \"không chỉ định\" `nguồn` cho cả git push và git fetch. Bạn có thể làm điều này bằng cách để trống tham số như sau:",
"", "",
"* `git push origin :side`", "* `git push origin :side`",
"* `git fetch origin :bugFix`", "* `git fetch origin :bugFix`",
@ -777,7 +777,7 @@ exports.level = {
"Cuối cùng, nạp \"không gì cả\" vào một kho chứa cục bộ thực tế sẽ tạo ra một nhánh mới" "Cuối cùng, nạp \"không gì cả\" vào một kho chứa cục bộ thực tế sẽ tạo ra một nhánh mới"
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Khá là quái và dị. Nhưng mà dó là những gì git làm!" "Khá là quái và dị. Nhưng mà đó là những gì Git làm!"
], ],
"command": "git fetch origin :bar", "command": "git fetch origin :bar",
"beforeCommand": "git clone" "beforeCommand": "git clone"

View file

@ -1586,10 +1586,10 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Theo dõi nhánh từ xa", "### Theo dõi nhánh từ xa",
"", "",
"Trong những bài học vừa qua có một điểu có vẻ như là \"ma thuật\" đó là git lại biết được nhánh `main` có liên kết đến nhánh `o/main`. Đúng là chúng có tên tương tự và nhánh `main` ở kho chứa từ xa có kết nối đến nhánh `main` ở kho chứa địa phương có vẻ như là hợp lý, nhưng kết nối này được thể hiện rõ ràng trong 2 trường hợp:", "Trong những bài học vừa qua có một điểu có vẻ như là \"ma thuật\" đó là Git lại biết được nhánh `main` có liên kết đến nhánh `o/main`. Dù các nhánh này có tên giống nhau và có vẻ hợp lý để kết nối nhánh `main` trên remote với nhánh `main` trên local, nhưng điều này được thể hiện rõ ràng qua hai tình huống sau:",
"", "",
"* Trong quá trình thực hiện thao tác kéo, các commit được tải xuống nhánh `o/main` và sau đó *hợp nhất* vào nhánh `main`. Mục tiêu hợp nhất dược ngầm định bởi kết nối này.", "* Trong quá trình thực hiện thao tác kéo, các commit được tải xuống nhánh `o/main` và sau đó *hợp nhất* vào nhánh `main`. Mục tiêu hợp nhất dược ngầm định bởi kết nối này.",
"* Trong quá trình thực hiện thao tác đẩy, thảnh quả trên nhánh `main` được đẩy lên nhánh `main` từ xa (sau dó được biểu thị bằng nhánh `o/main` ở kho chứa địa phương). *Đích đến* của lệnh đẩy được xác định bằng kết nối giữa nhánh `main` và nhánh `o/main`.", "* Trong quá trình thực hiện thao tác đẩy, thảnh quả trên nhánh `main` được đẩy lên nhánh `main` từ xa (sau đó được biểu thị bằng nhánh `o/main` ở kho chứa cục bộ). *Đích đến* của lệnh đẩy được xác định bằng kết nối giữa nhánh `main` và nhánh `o/main`.",
"" ""
] ]
} }
@ -1600,13 +1600,13 @@ exports.level = {
"markdowns": [ "markdowns": [
"## Theo dõi từ xa", "## Theo dõi từ xa",
"", "",
"Nói tóm lại, kết nối giữa nhánh `main` và nhánh `o/main` đơn giản được giải thích bằng thuộc tính \"theo dõi từ xa\" (\"remote tracking\") của các nhánh. Nhánh `main` được thiết lập để theo dõi nhánh `o/main` -- Điều này có nghĩa là nhánh `main` được chỉ định đích của lệnh đẩy và mục tiêu hợp nhất sau khi kéo.", "Nói tóm lại, kết nối giữa nhánh `main` và nhánh `o/main` đơn giản được giải thích bằng thuộc tính \"theo dõi từ xa\" (\"remote tracking\") của các nhánh. Nhánh `main` được thiết lập để theo dõi nhánh `o/main` -- Điều này có nghĩa là có điểm đến ngụ ý cho việc hợp nhất (merge) và đẩy lên (push) của nhánh `main`.",
"", "",
"Có thể bạn sẽ thắc mắc rằng tại sao thuộc tính này được thiết lập lên nhánh `main` trong khi bạn chẳng hề chạy một câu lệnh nào chỉ định điều này. Chà, khi bạn dùng git để nhân bản kho chứa, thì thuộc tính này đã được tự động thiết lập cho bạn rồi. ", "Có thể bạn sẽ thắc mắc rằng tại sao thuộc tính này được thiết lập lên nhánh `main` trong khi bạn chẳng hề chạy một câu lệnh nào chỉ định điều này. Chà, khi bạn dùng Git để nhân bản kho chứa, thì thuộc tính này đã được tự động thiết lập cho bạn rồi. ",
"", "",
"Trong quá trình thực hiện nhân bản, git tạo ra nhánh từ xa trên kho chứa địa phương cho tất cả các nhánh trên kho chứa từ xa (các nhánh như `o/main`). Sau đó nó sẽ tạo một nhánh địa phương theo dõi nhánh hoạt dộng hiện tại của kho chứa từ xa, đa phần các trường hợp là nhánh `main`.", "Trong quá trình thực hiện nhân bản, Git tạo ra nhánh từ xa trên kho chứa cục bộ cho tất cả các nhánh trên kho chứa từ xa (các nhánh như `o/main`). Sau đó nó sẽ tạo một nhánh cục bộ theo dõi nhánh hoạt động hiện tại của kho chứa từ xa, đa phần các trường hợp là nhánh `main`.",
"", "",
"Một khi quá trình nhân bản hoàn thành, bạn sẽ chỉ có một nhánh địa phương (để bạn không thấy quá tải) nhưng bạn có thể thấy tất cả các nhánh trên kho chứa từ xa (phòng trường hợp bạn thấy tò mò). Đây là phương án tối ưu!", "Một khi quá trình nhân bản hoàn thành, bạn sẽ chỉ có một nhánh cục bộ (để bạn không thấy quá tải) nhưng bạn có thể thấy tất cả các nhánh trên kho chứa từ xa (phòng trường hợp bạn thấy tò mò). Đây là phương án tối ưu!",
"", "",
"Điều này giải thích việc sau khi nhân bản bạn có thể thấy dòng lệnh sau xuất hiện:", "Điều này giải thích việc sau khi nhân bản bạn có thể thấy dòng lệnh sau xuất hiện:",
"", "",
@ -1637,7 +1637,7 @@ exports.level = {
"Nói vậy là đủ rồi, hãy xem thử một mô tả nào! Ta sẽ chuyển sang một nhánh tên là `foo` và thiết lập cho nó theo dõi nhánh `main` trên kho chứa từ xa." "Nói vậy là đủ rồi, hãy xem thử một mô tả nào! Ta sẽ chuyển sang một nhánh tên là `foo` và thiết lập cho nó theo dõi nhánh `main` trên kho chứa từ xa."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Như bạn đã thấy, chúng tôi đã sử dụng mục tiêu ngầm `o / main` để cập nhật nhánh` foo. Để ý rằng nhánh `main` không được cập nhật!!" "Như bạn đã thấy, chúng tôi đã sử dụng mục tiêu ngầm `o / main` để cập nhật nhánh `foo`. Để ý rằng nhánh `main` không được cập nhật!!"
], ],
"command": "git checkout -b foo o/main; git pull", "command": "git checkout -b foo o/main; git pull",
"beforeCommand": "git clone; git fakeTeamwork" "beforeCommand": "git clone; git fakeTeamwork"
@ -1647,7 +1647,7 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Điu này cũng được áp dụng cho lệnh git push." "Điu này cũng được áp dụng cho lệnh git push."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Bùùm. Ta đã đẩy thành quả lên nhánh `main` ở kho chứa tù xa mặc dù nhánh của ta có tên hoàn toàn khác biệt" "Bùùm. Ta đã đẩy thành quả lên nhánh `main` ở kho chứa tù xa mặc dù nhánh của ta có tên hoàn toàn khác biệt"
@ -1662,7 +1662,7 @@ exports.level = {
"markdowns": [ "markdowns": [
"### Cách thứ #2", "### Cách thứ #2",
"", "",
"Cách khác để thiết lập theo dõi trên một nhánh đó là đơn giản sử dụng lệnh `git branch -u`. Thực hiện", "Cách khác để thiết lập theo dõi trên một nhánh đó là sử dụng lệnh `git branch -u`. Thực hiện",
"", "",
"`git branch -u o/main foo`", "`git branch -u o/main foo`",
"", "",
@ -1677,10 +1677,10 @@ exports.level = {
"type": "GitDemonstrationView", "type": "GitDemonstrationView",
"options": { "options": {
"beforeMarkdowns": [ "beforeMarkdowns": [
"Hãy xem thử cách khác để thiết lập theo dõi..." "Hãy xem thử cách này để thiết lập theo dõi..."
], ],
"afterMarkdowns": [ "afterMarkdowns": [
"Y hệt như trước, nhưng lệnh này biểu hiện rõ ràng hơn. Tuyệt!" "Y hệt như trước, nhưng biểu hiện rõ ràng hơn. Tuyệt!"
], ],
"command": "git branch -u o/main foo; git commit; git push", "command": "git branch -u o/main foo; git commit; git push",
"beforeCommand": "git clone; git checkout -b foo" "beforeCommand": "git clone; git checkout -b foo"
@ -1690,7 +1690,7 @@ exports.level = {
"type": "ModalAlert", "type": "ModalAlert",
"options": { "options": {
"markdowns": [ "markdowns": [
"Được rồi! Ở cấp độ này hãy để thành quả lên nhánh `main` trên kho lưu trữ từ xa mà không chuyển sang nhánh `main` tại kho địa phương. Hãy tự tìm ra cách nhé, giờ là khóa học nâng cao rồi :P" "Được rồi! Ở cấp độ này hãy để thành quả lên nhánh `main` trên kho lưu trữ từ xa mà không chuyển sang nhánh `main` tại kho chứa cục bộ. Hãy tự tìm ra cách nhé, giờ là khóa học nâng cao rồi :P"
] ]
} }
} }