Network Security Internet Technology Development Database Servers Mobile Phone Android Software Apple Software Computer Software News IT Information

In addition to Weibo, there is also WeChat

Please pay attention

WeChat public account

Shulou

Getting started with git applications

2025-02-24 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >

Share

Shulou(Shulou.com)06/02 Report--

1. Introduction to git 1.1 History of production

​ git is the most advanced distributed version control system in the world.

​ Linus created the open source Linux in 1991. Since then, the Linux system has evolved into the largest server system software. Although Linus created Linux, the growth of Linux depends on the participation of enthusiastic volunteers from all over the world. With so many people writing code for Linux around the world, how is the Linux code managed? The truth is, before 2002, volunteers around the world sent source code files to Linus via diff, and then Linus himself merged the code manually!

​ you might wonder, why doesn't Linus put Linux code in the version control system? Aren't there free version control systems like CVS and SVN? Because Linus is firmly opposed to CVS and SVN, these centralized version control systems are not only slow, but also must be connected to the Internet before they can be used. There are some commercial version control systems that are easier to use than CVS and SVN, but they are paid for and are not in line with the open source spirit of Linux. However, in 2002, the Linux system had been developed for ten years, and the size of the code base made it difficult for Linus to continue to manage it manually, and the brothers in the community expressed strong dissatisfaction with this way, so Linus chose a commercial version control system, BitKeeper,BitKeeper 's owner, BitMover, in a humanitarian spirit, authorized the Linux community to use the version control system free of charge. The good situation of stability and unity was broken in 2005, due to the gathering of cattle people in the Linux community, which inevitably contaminated the habits of some Liangshan heroes. Andrew, who developed Samba, tried to crack BitKeeper's protocol (and he wasn't the only one), and was discovered by BitMover (good monitoring!) So BitMover got angry and wanted to take back the free right to use the Linux community. Linus can apologize to BitMover and promise to discipline the brothers strictly in the future. Well, this is impossible.

​ actually goes like this: it took Linus two weeks to write a distributed version control system in C, which is Git! Within a month, the source code of the Linux system has been managed by Git! How do you define a cow? You can feel it. Git quickly became the most popular distributed version control system, especially in 2008, when the GitHub website was launched, which provided free Git storage for open source projects, and numerous open source projects began to migrate to GitHub, including jQuery,PHP,Ruby, and so on. History is so accidental that if BitMover hadn't threatened the Linux community, we might not have a free and super-useful Git now.

1.2 two major features of git version control: it can solve the problem of code developed by multiple people at the same time, and it can also solve the problem of retrieving historical code. Distributed: Git is a distributed version control system, the same Git repository, can be distributed to different machines. First of all, find a computer to act as a server, turn it on 24 hours a day, and everyone else makes a copy from this "server" warehouse to their own computer, and each pushes their own submissions to the server warehouse. also pull other people's submissions from the server warehouse. You can build this server yourself, or you can use the GitHub website. two。 Installation and configuration 2.1.The 1:yum installation commands are as follows

(version 1.8 of this installation is too old to learn to use. It is recommended to use the second way to generate the environment.)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/a69f1d7dde72520efa39cd829ebc424d.png)

2.2 Mode 2: compilation and installation (recommended in production environment)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/07456582b5f33002e870c1b7d493006a.png)

(3) after the installation is successful, run the following command:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/f6db1580572213aa6f925902a1dba10c.png)

3. Create a version library

Create a new directory git_test and create a version library under the git_test directory, command: git init

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/4722f206b798e103d3025b2e141c0e7e.png)

You can see that a .git hidden directory has been created under the git_test directory, which is the version library directory.

4. How version creation and fallback 4.1 git works

When ① creates a file in the version library, it has the first version of the file, and a pointer is generated to that version.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/6b88e8ed7860db0b26ed20dc7f7deda8.png)

② generates a second version when it modifies the contents of the code.txt, but this version relies on the previous version, in which only those changes to the file are recorded. After you have a new version, this pointer points to the latest version.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/6df42071833e9d06ac2e29311a3137c5.png)

③ can fall back to a certain version by changing the position of the pointer. There are two ways to express it, one is to use ^, the other is to use ~, as follows

L head ^ or HEAD~1: indicates the previous version

L head ^ or HEAD~2: indicates the previous two versions

After falling back to the first version in the above way, the pointer points to version 1

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/12f0ad0473c03b018e670f66adb80859.png)

4.2 use

(1) create a file code.txt under the git_test directory and write a line as follows:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/52eed22d940b2c0dd28dafdbc44b0a82.png)

(2) use the following two commands to create a version, which takes two steps:

① git add code.txt

② git commit-m 'version 1'

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/0b245c928d82cb17440a199fca4a106a.png)

(3) to view the version record, the command is git log:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/1928a9c46af9b1e0d5fba3d223e11e6d.png)

(4) continue editing code.txt and add a line to it.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/a8b00e15d20927d2e0f221c9f85ea374.png)

(5) use the following command to create another version and view the version record:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/19ec9f94aa928236749a533ab7273fc1.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/59b8e34134704ae7ffad891986cdce40.png)

(6) now, if you want to return to a certain version, you can use the following command:

Git reset-- hard head ^

Where HEAD represents the latest version, head ^ represents the previous version of the current version, head ^ ^ represents the previous version of the current version, or you can use HEAD~1 to represent the previous version of the current version, and HEAD~100 represents the first 100th version of the current version.

Now if you want to go back to version 1, you can use the following command:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/622cf2c65767930b0336720086b396a4.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/bf209a7e8a84c9561660f3d2c832fc3d.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/293e0ee75ade3c7407946616e7e174e7.png)

After executing the command, use git log to view the version record, and find that now you can only see the record of version 1, and cat code.txt can view the contents of the file, which is now only one line, that is, the contents of code.txt in the first version.

(7) what if we want to go back to version 2 now?

You can use the following command:

Git reset-- hard version number

From the above, you can see that the version number of version 2 is:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/d9f54d5442caa834c55f89d961d12ef2.png)

(8) Select the version according to the sequence number obtained by the query:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/43688f6a851ed6184b10b9eb4b36ea66.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/ddc8fb3d31b0b1f58f126f93928438a4.png)

Now I find that version 2 has come back. You can view its contents on cat code.txt as follows:

(9) if the above terminal has been closed, how to reverse the version.

We are executing the following command to fallback the version to version 1.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/adc54a2e15245ecf6ac2032952b54ee5.png)

Next, turn off the terminal, and then open the terminal, and find that the previous version 2 version number can not be seen.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/2d945896a80dc6303c56dd357abfd91d.png)

So how do you get back to version 2? The git reflog command can view our operation records.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/1856351329cd92321260f41e3d11a073.png)

You can see the version number of version 2, and then use the following command to roll back the version, and the version goes back to version 2.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/675df08acb21bd8dfe60ed15a5af6fe7.png)

4.3Workspace and staging area 4.2.1 Workspace (Working Directory)

A directory on your computer, such as our git_test, is a workspace.

4.2.2 version Library (Repository)

The workspace has a hidden directory. Git, which is not the workspace, but the git version library.

There are many things in the version library of l git, the most important of which are the temporary storage area called stage (or index), the first branch master that git automatically created for us, and a pointer to master called HEAD.

Because git automatically created a unique master branch for us when we created the git version library, git commit is now committing changes to the master branch.

You can simply understand that all the file changes that need to be submitted are put in the temporary storage area, and then all the changes in the temporary storage area are submitted at once.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/9d04da9025130069684dc44c5cf6925b.png)

As mentioned earlier, when we add files to the git version library, it is performed in two steps:

The first step is to add the file with git add, which is actually adding file changes to the temporary storage area.

The second step is to commit the changes using git commit, which essentially commits all the contents of the staging area to the current branch.

(1) create another file code2.txt under the git_test directory, and then edit the contents as follows:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/83ee9f6032ae0bb75f2f08cc9d9c315e.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/ef7e51dcf1ef925e187405bec12ff783.png)

(2) then edit the code.txt content again and add a line to it. The edited content is as follows:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/97dc419986fac449458333fb110a7d22.png)

(3) use the following command to view the status of the current working tree:

Git status

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/cfb1eb0f1fe49ade9363f35ce4bb992b.png)

The above prompts us that code.txt has been modified and code2.txt has not been tracked.

(4) We use the following command to add code.txt and code2.txt to the temporary storage area, and then execute the git status command. The result is as follows:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/06847424b8663028ecab6fecdde05e7b.png)

All git add commands store all committed changes in the staging area.

(5) then, execute git commit to submit all changes to the staging area to the branch at once to create a version.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/80b3bb11d8d8644dcd211cbbfad30a0c.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/85d569a429786cce0694f26a4df4d1f1.png)

(6) once submitted, if you have not made any changes to the workspace, then the workspace is "clean". Execute the following command to find:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/1a39201a621e16067b015747128700ea.png)

4.3 manage changes

Changes to files managed by git, which only commits changes to the staging area to create a version.

(1) Edit the code.txt and use the git add command to add it to the staging area.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/4fa2426cd28b21364efc4b55f4aa36be.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/8424cedf040abd54acf8cca269290b8f.png)

Add to cache

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/57b57dfcc86e2556bd1c3f1bb474a88d.png)

Add another line

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/f865de8037b69aff355f1603f06fab93.png)

(2) git commit creates a version

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/f566cad50cca22c4a19fe3b993667c6f.png)

At this point and use git status to check, it is found that the status is not clean.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/87ede3cfb11ed956cee55c026ea0ef82.png)

This is because after the second modification of the code.txt content, there is no workspace to add it, so the version was not submitted when it was created.

4.4 undo the modification

(1) continue the above operation, prompting us to use the format to undo the operation, that is, to discard your changes in the workspace:

Git checkout--

Execute the following command

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/355890b389e820c43d12d5e6a440856e.png)

Found the work area clean.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/19fbdc3cd4e7f4d36298f6d2fed0582b.png)

The content of the second change is gone.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/b8d1df6711d8a61f8704c4da411da7e6.png)

(1) the previous demonstration is to roll back the content that has not been added to the temporary storage area. In fact, even if it is added to the temporary storage area, it can be rolled back at the beginning.

Let's continue editing code.txt and add the following to it! [img] (file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/ba216e8d1d4fdee2a99d4381557af131.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/e66b86628c924d16fa519cec7411b916.png)

And add it to the temporary storage area

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/762edae36f9b9aa5787e9933e9c02dac.png)

(3) git also tells us that the changes to the temporary storage area can be undone and put back to the workspace with the command git reset [option] HEAD file.

There are three options

L-- hard: the contents of the cache and working directory are rolled back to the specified version state

L-- mixed: default option, the cache is synchronized with the submission you specified, but the working directory is not affected

L-- soft: the contents in the cache and working directory remain the same (only the specified version of the content in the library is rolled back)

L when using these options, you can no longer specify specific files

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/54ae8f8351550ce24176c04c92239604.png)

Status

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/71a550c8a984f4a2128a9f64b7012a95.png)

At this point, just delete the contents of the staging area, and then roll back the file to the state it was before it was modified.

(4) now if you want to discard the changes to code.txt, execute the following command.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/9831f9bea646ce2be61d164e3df5b478.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/37630b24e0baa6f8d66130e4d625beee.png)

Now, if you not only correct something, but also submit it from the staging area to the version library, you need to do a version fallback.

Summary:

Scenario 1: when you change the contents of a file in the workspace and want to discard the changes in the workspace directly, use the command git checkout-- file.

Scenario 2: when you not only change the contents of a file in the workspace, but also add it to the temporary storage area, you want to discard the changes in two steps. The first step is to use the command git reset HEAD file to return to scenario 1, and the second step is to follow scenario 1.

Scenario 3: when inappropriate changes have been submitted to the version library, if you want to cancel this submission, refer to the version fallback section.

To demonstrate the role of the three options

Let's demonstrate hard options first.

1 edit a file 1 in the version library and add to the staging area

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/5d530dcb7bce2f17fc4248533e299132.png)

2 Edit another file (do not save to staging area)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/2c5bbb630e4f1b577ff93f0a2ca70758.png)

3 check the status, one is in the temporary storage area and the other is untracked

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/b71db601d079d062721aef77afa375b2.png)

4. Roll back to a state with git reset-- hard xxxx

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/a1e85d5186146a53bd624aa9642f51d9.png)

5 check the status again (at this time, it is found that it is clean, and there is no status at all)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/41b06d00f52f39d5b36681a1fb4af1cd.png)

6 the newly added contents in these two files are gone.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/a370b5a15a1deabee555e293779fd538.png)

Let's demonstrate soft options first.

The front part is slightly

1 execute reset and roll back to the first version

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/fc1c65b52e38f2304d76f209c5218e70.png)

At this time, the contents of the temporary storage area and the file are still there.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/69dc1a095d7b3d61645f6b9f38eee320.png)

3 check the current version, has returned to the first version, the other versions are gone

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/9c879cf18be9dfe16f3930329531f09a.png)

4.5 compare the differences in documents

Compare the differences between the workspace and the files in a version:

(1) continue editing the file code.txt and add a line to it.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/e5f736f400318148a93ceabadc4a10fb.png)

(2) now compare the difference between the code.txt in the workspace and the code.txt in the previous version. Use the following command:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/1a5ec4f8e3e0b2d76e150bfc7fae92de.png)

We can also compare it with the second version in the version library.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/e0a7de42a8b74086425df0e2f1ebddd3.png)

Compare the differences in files between the two versions:

(1) to compare the differences of code.txt in HEAD and head ^ versions, use the following command:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/3ed628ef52b772b3e19fef0b79259c63.png)

4.6 Delete files

(1) We delete the code2.txt from the directory.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/6ad4029784e757af1f86d3196beaec1b.png)

At this point, git knows that the files have been deleted, so the workspace and the version library are inconsistent, and the git status command immediately prompts you which files have been deleted.

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/f4bd59749d6c6686506a782cfbfef7b6.png)

(2) now you have two choices. One is to delete the file from the version library, then delete it with the command git rm, and git commit:

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/50be31433c697f5f0b37eca1a304442c.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/11ebc5ed25d427c4c956f2bc92b2aa83.png)

! [img] file:///C:/Users/sy/Documents/My Knowledge/temp/fc8918e9-6218-4de1-ae60-6e01447f1ea3/128/index_files/10747f8023cf258fd8bd1b157e2fc920.png)

In another case, if you delete it incorrectly, you can use git checkout-code2.txt directly, so that the file code2.txt comes back.

Summary:

The command git rm is used to delete a file. If a file has been submitted to the version library, then you never have to worry about erroneous deletion, but be careful, you can only restore the file to the latest version, you will lose the content you modified after the last submission.

Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.

Views: 0

*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.

Share To

Servers

Wechat

© 2024 shulou.com SLNews company. All rights reserved.

12
Report