คุณจะซ่อนไฟล์ที่ไม่ได้ติดตามได้อย่างไร


1436

ฉันมีการเปลี่ยนแปลงกับไฟล์รวมถึงไฟล์ใหม่และต้องการใช้ git stash เพื่อลบมันออกไปในขณะที่ฉันสลับไปใช้งานอื่น แต่ git stash ด้วยตัวเองจะหยุดการเปลี่ยนแปลงไฟล์ที่มีอยู่เท่านั้น ไฟล์ใหม่ยังคงอยู่ในแผนผังการทำงานของฉันทำให้งานในอนาคตของฉันยุ่งเหยิง ฉันจะซ่อนไฟล์ที่ไม่ได้ติดตามนี้ได้อย่างไร


27
โปรดระวังว่าถ้าคุณมีไฟล์ที่ไม่ได้ติดตามในที่ซ่อนของคุณมันจะดูเหมือนเป็นไฟล์ที่ว่างเปล่าเนื่องจากgit stash showไม่มีอะไรคืนและคุณอาจถูกล่อลวงให้วางมัน (อย่างที่ฉันเพิ่งทำในขณะที่มันมีสคริปต์ที่มีประโยชน์ → วิธีกู้คืนที่ถูกทิ้ง )
Maxime R.

คำตอบ:


1924

หากต้องการซ่อนไดเร็กทอรีการทำงานของคุณรวมถึงไฟล์ที่ไม่ได้ติดตาม (โดยเฉพาะไฟล์ที่อยู่ใน. gitignore) คุณอาจต้องการใช้คำสั่งนี้:

git stash --include-untracked

รายละเอียดเพิ่มเติม:

อัปเดต 17 พฤษภาคม 2561:

ตอนนี้เวอร์ชันใหม่ของ git มีgit stash --allไฟล์ทั้งหมดที่หยุดทำงานรวมถึงไฟล์ที่ไม่ได้ติดตามและไม่สนใจ
git stash --include-untrackedไม่แตะไฟล์ที่ถูกละเว้นอีกต่อไป (ทดสอบกับ git 2.16.2)

คำตอบเดิมด้านล่าง:

คำเตือนการทำเช่นนี้จะเป็นการลบไฟล์ของคุณอย่างถาวรหากคุณมีรายการไดเร็กทอรี / * ในไฟล์ gitignore ของคุณ

ในฐานะเวอร์ชั่น 1.7.7 คุณสามารถใช้git stash --include-untrackedหรือgit stash save -uซ่อนไฟล์ที่ไม่ได้ติดตามโดยไม่ต้องทำการ staging

เพิ่ม ( git add) ไฟล์และเริ่มติดตาม จากนั้นซ่อนตัว เนื่องจากเนื้อหาทั้งหมดของไฟล์เป็นเนื้อหาใหม่พวกเขาจะถูกซ่อนและคุณสามารถจัดการได้ตามความจำเป็น


4
ทำไม stash ยังคง stash เปลี่ยนไฟล์ที่มีอยู่แม้ว่าการเปลี่ยนแปลงเหล่านั้นจะไม่ถูกจัดฉาก?
อลัน Christensen

6
@ alan-Christensen อ่านคำอธิบายของkernel.org/pub/software/scm/git/docs/git-stash.html ประเด็นคือต้องมีต้นไม้ทำงานที่สะอาดหลังจากการหยุดชะงัก
เคลวิน

3
@Kelvin สิ่งที่ฉันหมายถึงในความคิดเห็นของฉันคือมันไม่ได้ซ่อนไฟล์ใหม่จนกว่าพวกเขาจะได้รับการจัดฉาก แต่มันจะซ่อนไฟล์ที่มีอยู่แม้ว่าพวกเขาจะไม่ได้ถูกจัดฉาก ดูเหมือนจะไม่สอดคล้องกับฉัน
Alan Christensen

11
@ AlanChristensen ประเด็นก็คือการซ่อนสิ่งต่าง ๆ ที่อาจถูกเขียนทับโดยชำระเงินจากสาขาที่แตกต่างกัน
jwg

3
ในขณะที่คุณมีคำตอบด้านบนที่นี่ผมจะขอให้คุณรายการgit stash --include-untrackedก่อนgit stash --allในคำตอบของคุณด้วยเหตุผลสองประการ ก่อนอื่นมันจะตอบคำถามของ OP ได้ดีขึ้นในปี 2019 และครั้งที่สองเพราะ - ทำทุกอย่างที่ผู้ใช้ส่วนใหญ่อาจไม่ต้องการเพราะมันจะลบไฟล์ทั้งหมดที่ได้รับการรับรอง
Daniel Flippance

411

ในฐานะของคอมไพล์ 1.7.7 git stashยอมรับ--include-untrackedตัวเลือก (หรือทางลัด-u) หากต้องการรวมไฟล์ที่ไม่ได้ติดตามในที่เก็บของคุณให้ใช้คำสั่งอย่างใดอย่างหนึ่งต่อไปนี้:

git stash --include-untracked
git stash -u

คำเตือนการทำเช่นนี้จะเป็นการลบไฟล์ของคุณอย่างถาวรหากคุณมีรายการไดเร็กทอรี / * ในไฟล์ gitignore ของคุณ


15
เจ๋ง - ในที่สุดก็ใช้งานได้ตามที่อธิบายไว้ในหน้าคู่มือ การ Stashing (และทำความสะอาด) ไฟล์ใหม่ไม่ทำงาน
Steve Bennett

1
git รุ่นของฉันคือ 1.9.1 และแม้ว่าสิ่งที่ฉันมีใน.gitignoreลักษณะเช่นนี้ignoredDirectoryและไม่ignoredDirectory/*ได้ลบผู้ที่ไม่ได้ติดตาม แม้แต่ไฟล์ที่ไม่ได้ติดตามไม่เพียง แต่ไดเรกทอรี
theUnknown777

22
คุณช่วยอธิบายคำเตือนได้มั้ย ทำไมมันจะลบไฟล์เหล่านั้น? มันลบพวกเขาและไม่ซ่อนพวกเขา? ฉันใช้ Git มาระยะหนึ่งแล้วและยังไม่พบปัญหานี้
Aleksandr Dubinsky

คำเตือนใช้กับ*.extensionรายการด้วยหรือไม่
arekolek

3
@ aleksandr-dubinsky, @arekolek - git1.8.3 -u( --include-untracked) ตัวเลือกสามารถซ่อนและ pop ไฟล์ที่git stash showไม่ได้ติดตามได้แต่ไม่แสดงรายการไฟล์ที่ไม่ได้ติดตามที่อยู่ใน stash
xilef

77

เพิ่มไฟล์ไปยังดัชนี:

git add path/to/untracked-file
git stash

เนื้อหาทั้งหมดของดัชนีรวมถึงการเปลี่ยนแปลงใด ๆ กับไฟล์ที่มีอยู่จะถูกทำให้เป็นที่ซ่อน


ถ้าคุณไม่ต้องการซ่อนการเปลี่ยนแปลงที่มีอยู่ในดัชนีอยู่แล้ว Stashing ไฟล์ใหม่ยังคงเป็นไปได้หรือไม่?
allyourcode

คอมมิทดัชนี, ซ่อนไฟล์ใหม่, จากนั้นแปลงการคอมมิทและ / หรือตรวจสอบไฟล์จากการคอมมิท. มันเป็นโซลูชัน kludgy แต่มันควรจะใช้ได้
Gdalya

git add .ไม่ได้คำนึงถึงเหตุผลบางประการ
TheBilTheory

53

ใน git bash การ stashing ของไฟล์ที่ไม่ได้ติดตามจะทำได้โดยใช้คำสั่ง

git stash --include-untracked

หรือ

git stash -u

http://git-scm.com/docs/git-stash

git stash ลบไฟล์ใด ๆ ที่ไม่ได้ติดตามหรือไม่ได้รับการผูกมัดออกจากพื้นที่ทำงานของคุณ และคุณสามารถย้อนกลับ git stash ได้โดยใช้คำสั่งต่อไปนี้

git stash pop

สิ่งนี้จะวางไฟล์กลับในพื้นที่ทำงานของคุณ

ประสบการณ์ของฉัน

ฉันต้องทำการแก้ไขไฟล์ gitIgnore ของฉันเพื่อหลีกเลี่ยงการเคลื่อนไหวของไฟล์. classpath และ. project ลงใน repo ระยะไกล ฉันไม่ได้รับอนุญาตให้ย้าย. gitIgnore ที่แก้ไขนี้ใน repo ระยะไกล ณ ตอนนี้

ไฟล์. class และ. project มีความสำคัญสำหรับ eclipse - ซึ่งเป็นตัวแก้ไขจาวาของฉัน

ฉันก่อนอื่นเลือกเพิ่มไฟล์ที่เหลือของฉันและมุ่งมั่นสำหรับการแสดงละคร อย่างไรก็ตามการกดครั้งสุดท้ายไม่สามารถทำได้เว้นแต่ว่ามีการแก้ไข. gitIgnore fiels และไฟล์ที่ไม่ได้ติดตามซึ่ง ได้แก่ .project และ. classpath จะไม่ถูก stashed

ฉันใช้

 git stash 

สำหรับ stashing ไฟล์. gitIgnore ที่แก้ไข

สำหรับ stashing .classpath และ. project ฉันใช้

git stash --include-untracked

และลบไฟล์ออกจากพื้นที่ทำงานของฉัน การขาดไฟล์เหล่านี้ทำให้ความสามารถในการทำงานในสถานที่ทำงานของฉันในคราสลดลง ฉันดำเนินการต่อโดยทำตามขั้นตอนสำหรับการส่งไฟล์ที่กำหนดไปยังรีโมต เมื่อทำสิ่งนี้สำเร็จฉันก็ใช้

git stash pop

วางไฟล์เดียวกันนี้กลับในพื้นที่ทำงานของฉัน สิ่งนี้ทำให้ฉันมีความสามารถในการทำงานในโครงการเดียวกันในคราส หวังว่าแปรงนี้กันความเข้าใจผิด


2
ทำไมคุณไม่ใช้ gitignore ทั่วโลกสำหรับไฟล์ IDE? กล่าวคือ ~/.gitignoreใช้
Antti Pihlaja

20

ดังที่ได้กล่าวไว้ที่อื่นคำตอบคือgit addไฟล์ เช่น:

git add path/to/untracked-file
git stash

อย่างไรก็ตามคำถามก็ถูกยกขึ้นในอีกคำตอบหนึ่ง: ถ้าคุณไม่ต้องการเพิ่มไฟล์จริงๆ เท่าที่ฉันสามารถบอกได้คุณต้อง และสิ่งต่อไปนี้จะไม่ทำงาน:

git add -N path/to/untracked/file     # note: -N is short for --intent-to-add
git stash

สิ่งนี้จะล้มเหลวดังนี้:

path/to/untracked-file: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

ดังนั้นคุณจะทำอย่างไร คุณต้องเพิ่มไฟล์อย่างแท้จริงอย่างไรก็ตามคุณสามารถยกเลิกการเพิ่มได้อย่างมีประสิทธิภาพในภายหลังด้วยgit rm --cached:

git add path/to/untracked-file
git stash save "don't forget to un-add path/to/untracked-file" # stash w/reminder
# do some other work
git stash list
# shows:
# stash@{0}: On master: don't forget to un-add path/to/untracked-file
git stash pop   # or apply instead of pop, to keep the stash available
git rm --cached path/to/untracked-file

และจากนั้นคุณสามารถทำงานต่อได้ในสถานะเดียวกับที่คุณอยู่ก่อนหน้าgit add(คือไฟล์ที่ไม่ได้ติดตามที่เรียกว่าpath/to/untracked-fileพร้อมการเปลี่ยนแปลงอื่น ๆ ที่คุณอาจต้องติดตามไฟล์)

ความเป็นไปได้อีกอย่างสำหรับเวิร์กโฟลว์ในเรื่องนี้จะเป็นอย่างไร:

git ls-files -o > files-to-untrack
git add `cat files-to-untrack` # note: files-to-untrack will be listed, itself!
git stash
# do some work
git stash pop
git rm --cached `cat files-to-untrack`
rm files-to-untrack

[หมายเหตุ: ตามที่ระบุไว้ในความคิดเห็นจาก @mancocapac คุณอาจต้องการที่จะเพิ่ม--exclude-standardไปที่git ls-filesคำสั่ง (เช่นนั้นgit ls-files -o --exclude-standard).]

... ซึ่งสามารถสคริปต์ได้อย่างง่ายดาย - แม้นามแฝงจะทำ (นำเสนอในไวยากรณ์ zsh; ปรับได้ตามต้องการ) [ยังฉันย่อชื่อไฟล์ให้สั้นลงเพื่อให้พอดีกับหน้าจอโดยไม่ต้องเลื่อนในคำตอบนี้; อย่าลังเลที่จะทดแทนชื่อไฟล์อื่นที่คุณเลือก]:

alias stashall='git ls-files -o > .gftu; git add `cat .gftu`; git stash'
alias unstashall='git stash pop; git rm --cached `cat .gftu`; rm .gftu'

โปรดทราบว่าหลังอาจดีกว่าในฐานะเชลล์สคริปต์หรือฟังก์ชั่นเพื่ออนุญาตให้มีการส่งพารามิเตอร์ไปให้git stashในกรณีที่คุณไม่ต้องการpopแต่applyและ / หรือต้องการระบุที่ซ่อนเฉพาะแทนที่จะใช้ด้านบน หนึ่ง. บางทีนี่ (แทนที่จะเป็นนามแฝงที่สองด้านบน) [ช่องว่างที่ถูกถอดออกให้พอดีโดยไม่ต้องเลื่อน เพิ่มอีกครั้งเพื่อให้อ่านง่ายขึ้น]:

function unstashall(){git stash "${@:-pop}";git rm --cached `cat .gftu`;rm .gftu}

หมายเหตุ : ในแบบฟอร์มนี้คุณจะต้องระบุอาร์กิวเมนต์การกระทำรวมถึงตัวระบุหากคุณกำลังจะให้ตัวระบุที่ซ่อนเช่นunstashall apply stash@{1}หรือunstashall pop stash@{1}

หลักสูตรใดที่คุณใส่ใน.zshrcหรือเทียบเท่าเพื่อให้มีอยู่ในระยะยาว

หวังว่าคำตอบนี้จะเป็นประโยชน์กับใครบางคนโดยรวมทุกอย่างไว้ในคำตอบเดียว


1
git ls-files -o แสดงไฟล์มากกว่าที่ฉันสนใจจากสถานะ gitต่อไปนี้ที่ฉันพบเพิ่ม - ไม่รวมงานมาตรฐาน git ls-files -o --exclude-standard สิ่งที่ฉันใช้ในการทำเช่นนี้คือ "รวม" ไฟล์ที่ไม่ได้ติดตามซึ่งปกติคุณจะไม่เพิกเฉยเช่นแสดงเฉพาะไฟล์ที่ไม่ได้ติดตามที่ไฟล์. gitignore ของคุณจะไม่กรองออกเลย
mancocapac

20

ใน git เวอร์ชั่น 2.8.1: การทำงานต่อไปนี้สำหรับฉัน

หากต้องการบันทึกไฟล์ที่แก้ไขและไม่ได้ติดตามในที่ซ่อนโดยไม่มีชื่อ

git stash save -u

เพื่อบันทึกไฟล์ที่ถูกแก้ไขและไม่ได้ติดตามในที่ซ่อนที่มีชื่อ

git stash save -u <name_of_stash>

คุณสามารถใช้ทั้งป๊อปหรือใช้ในภายหลังดังต่อไปนี้

git stash pop

git stash apply stash@{0}

สิ่งนี้ไม่ได้ลบไฟล์ที่ไม่ได้ติดตามไม่ออกจากคอมพิวเตอร์ของฉัน git stash showไม่ได้แสดงให้พวกเขา เมื่อฉันลองgit stash applyฉันได้รับ "ข้อผิดพลาด: ไม่สามารถเรียกคืนไฟล์ที่ไม่ได้ติดตามจากที่เก็บข้อมูล" อย่างไรก็ตามไฟล์นั้นจะถูกแสดงรายการอีกครั้งว่าไม่ได้ติดตาม แต่การเปลี่ยนแปลงของไฟล์ที่ถูกติดตามจะไม่ถูกกู้คืน ฉันคิดว่าไฟล์เหล่านั้นสามารถกู้คืนทีละรายการได้โดยการตรวจสอบจากที่ซ่อน แต่วิธีนี้ไม่ใช่สิ่งที่ฉันหวังไว้
hBrent

9

ผมสามารถที่จะเก็บสะสมเพียงไฟล์ที่ไม่ได้ติดตามโดยการทำ:

git stash save "tracked files I'm working on"
git stash save -u "untracked files I'm trying to stash"
git stash pop stash@{1}

ไฟล์สุดท้ายจะปรากฏที่ซ่อนของไฟล์ที่ถูกติดตามดังนั้นจะเหลือเฉพาะไฟล์ที่ไม่ได้ติดตามซึ่งถูกซ่อนไว้


git stash save -uไม่เพียง แต่บันทึกuntrackedไฟล์มันจะช่วยประหยัดทั้งและtracked untrackedฉันคิดว่าการประหยัดครั้งแรกที่คุณทำไม่จำเป็นในกรณีนี้ มีแผนภาพที่ดีในการเป็นatlassian.com/git/tutorials/saving-changes/...
Drenai

2
คำถามคือวิธีซ่อนไฟล์ที่ไม่ได้ติดตาม หากคุณข้ามที่ซ่อนแรกแล้วคุณจะปรากฏอะไร แนวคิดคือ: 1) Stash ถูกติดตาม 2) Stash untracked 3) ติดตามป๊อป ผลลัพธ์: ยังไม่ได้ติดตามจะถูกซ่อน
Oded

3

หากคุณต้องการซ่อนไฟล์ที่ไม่ได้ติดตาม แต่เก็บไฟล์ที่มีการจัดทำดัชนีไว้ (ไฟล์ที่คุณกำลังจะคอมมิท) ให้เพิ่ม-kตัวเลือก (เก็บดัชนี) ไว้ที่-u

git stash -u -k


2

สมมติว่าไฟล์ใหม่และที่ไม่ได้ติดตามถูกเรียกว่า: "views.json" ถ้าคุณต้องการที่จะเปลี่ยนสาขาโดย stashing สถานะของแอพของคุณฉันมักจะพิมพ์:

git add views.json

แล้ว:

git stash

และมันจะถูกซ่อน จากนั้นฉันก็สามารถเปลี่ยนสาขาด้วย

git checkout other-nice-branch

1

มีคำตอบที่ถูกต้องหลายข้อที่นี่ แต่ฉันต้องการจะชี้ให้เห็นว่าสำหรับไดเรกทอรีใหม่ทั้งหมด'git add path'จะไม่ทำงาน ดังนั้นหากคุณมีไฟล์ใหม่ ๆ มากมายในuntracked-pathและทำสิ่งนี้:

git add untracked-path
git stash "temp stash"

สิ่งนี้จะซ่อนด้วยข้อความต่อไปนี้:

Saved working directory and index state On master: temp stash
warning: unable to rmdir untracked-path: Directory not empty

และหากเส้นทางที่ไม่ได้ติดตามนั้นเป็นเส้นทางเดียวที่คุณซ่อนอยู่ stash "temp stash" จะเป็นที่เก็บที่ว่างเปล่า วิธีที่ถูกต้องคือการเพิ่มเส้นทางทั้งหมดไม่ใช่แค่ชื่อไดเรกทอรี (เช่นจบเส้นทางด้วย '/'):

git add untracked-path/
git stash "temp stash"

อย่างน้อยในระบบของฉันการสันนิษฐานของคุณนั้นผิด มันทำงานได้โดยไม่ต้องเฉือน! ไดเรกทอรีที่ว่างเปล่าจะถูกละเว้นอยู่ดี (macos git 2.6.2)
phobie

0

git stashฉันคิดว่านี้สามารถแก้ไขได้ด้วยการบอกคอมไพล์ว่าไฟล์ที่มีอยู่มากกว่าการกระทำทั้งหมดของเนื้อหาของมันไปยังพื้นที่การแสดงละครแล้วโทร Araqnid อธิบายถึงวิธีการทำอดีต

git add --intent-to-add path/to/untracked-file

หรือ

git update-index --add --cacheinfo 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 path/to/untracked-file

อย่างไรก็ตามหลังไม่ทำงาน:

$ git stash
b.rb: not added yet
fatal: git-write-tree: error building trees
Cannot save the current index state

1
เท่าที่ฉันบอกได้อดีตก็ไม่ได้ผลเช่นกัน ดูคำตอบของฉันสำหรับวิธีแก้ไขปัญหานี้
lindes

0
git stash --include-untracked

รายการโปรดของฉันเนื่องจากมันจะบันทึกไฟล์ที่คุณเพิ่มและยังไม่ได้จัดแสดง


0

ฉันพบปัญหาที่คล้ายกันในขณะที่ใช้ Sourcetree กับไฟล์ที่สร้างขึ้นใหม่ (พวกเขาจะไม่รวมอยู่ในที่ซ่อน)

เมื่อฉันเลือก 'stage all' ครั้งแรกจากนั้นซ่อนส่วนประกอบที่เพิ่งเพิ่มใหม่ซึ่งถูกติดตามและรวมอยู่ในที่เก็บ


คำถามนี้มีอายุ 11 ปีและมีคำตอบ 14 ข้อแล้ว คุณอ่านก่อนโพสต์หรือไม่
Mickael B.

-7

ฉันเคยไตร่ตรองและต้องการคุณสมบัติเดียวกัน แต่เมื่อเวลาผ่านไปฉันสังเกตเห็นว่ามันไม่จำเป็นจริงๆ เมื่อคุณซ่อนมันก็โอเคที่จะออกจากไฟล์ใหม่ ไม่มีอะไร "เลวร้าย" ที่จะเกิดขึ้นกับพวกเขา (เมื่อคุณตรวจสอบอย่างอื่น git จะเกิดข้อผิดพลาดและไม่เขียนทับไฟล์ที่ไม่ได้ติดตามที่มีอยู่)

และเนื่องจากโดยปกติกรอบเวลาระหว่างgit stashและgit stash popค่อนข้างเล็กคุณจะต้องใช้ไฟล์ที่ไม่ได้ติดตามอย่างรวดเร็วอีกครั้ง ดังนั้นฉันจะบอกว่าความไม่สะดวกของไฟล์ที่ปรากฏขึ้นในgit statusขณะที่คุณกำลังทำงานกับสิ่งอื่น (ระหว่างgit stashและถึงgit stash pop) นั้นเล็กลงดังนั้นความไม่สะดวกที่เกิดขึ้นจากการทำงานและต้องการความสนใจ ที่เก็บของคุณ


15
ขึ้นอยู่กับโครงการ สมมติว่าไฟล์ที่ไม่ได้ติดตามคือการทดสอบหน่วย (เขียนครึ่ง) และชุดควบคุมการทดสอบจะทำการทดสอบหน่วยทั้งหมดในไดเรกทอรี อื่น ๆ
Steve Bennett

1
อีกตัวอย่างคือถ้าคุณทำงานกับคอมพิวเตอร์สองเครื่องและคุณได้รับอนุญาตให้ย้ายข้อมูลจาก A ถึง B แต่ไม่ใช่จาก B ถึง A หากคุณสร้างโค้ดใหม่เพื่อแก้ปัญหาที่เกิดขึ้นบน B เป็นครั้งแรก ต้องการทั้ง A และ B คุณต้องการให้สามารถซ่อนไฟล์ใน B ดังนั้นเมื่อคุณสร้างไฟล์นั้นขึ้นบน A จากนั้นนำมารวมกันเป็นกลุ่มคุณสามารถคอมไพล์เวอร์ชั่น stashed เพื่อตรวจสอบว่าคุณไม่ได้ พลาดพลั้ง.
Gdalya

7
เพียงเพราะไฟล์ไม่ได้ถูกติดตามในสาขาเดียวไม่ได้หมายความว่าไฟล์นั้นจะไม่ขัดแย้งกับไฟล์ที่ถูกติดตามในสาขาอื่น
jwg

3
ตัวอย่างง่ายๆ: ไฟล์การกำหนดค่าในไดเรกทอรี. config.d หรืออื่น ๆ ที่มีการปรับเปลี่ยนการทำงานของซอฟต์แวร์เท่านั้น
fotanus

แน่นอนฟังก์ชั่นที่จำเป็น เป็นตัวอย่างเพิ่มเติมเป็นไปไม่ได้ที่จะสลับจากสาขาหนึ่งไปอีกสาขาหนึ่งหากคุณมีไฟล์ที่ไม่ได้ติดตามในเครื่องที่คุณต้องการซ่อน
Demitrian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.