繁体   English   中英

如何在替换当前文件并忽略无冲突文件的同时从git存储库中提取

[英]How to pull from git repository while replacing current files AND ignoring non-conflicting files

我的ubuntu服务器上有一个网站。 我通常在笔记本电脑上编写代码,然后使用scp复制代码。 我决定可以将其推送到笔记本电脑上的git存储库,然后将其拉到服务器上。 我在两台机器上的git仓库都在/ var / www / html中(由apache2提供)。

问题:

在我的服务器上,我有一个从/ home / files到/ var / www / html / files的符号链接。 我还有一个文件/var/www/html/images/image.png。 该文件和符号链接在我的笔记本电脑上不存在,因此当我从笔记本电脑执行git push时,它们不会添加到存储库中。

我想要:

在我的服务器上执行git pull并让其将所有当前的所有网页(例如/var/www/html/home.php)替换为存储库中的新版本,而不会更改该文件中不存在的本地文件储存库,例如/ var / www / html / files / *和/var/www/html/images/image.png

当我在服务器上执行git pull时,git似乎替换了/var/www/html/images/image.png(/ var / www / html / images)的父目录,因此我找不到/ var / www / html等/ image.png

了。

我所做的(在笔记本电脑上):

$ nano /var/www/html/home.php (update the webpage)

$ git push

我所做的(在服务器上):

$ ln -s /home/files /var/www/html/files 
$ cp /home/some/random/image.png /var/www/html/images/image.png
$ git pull

我期望:找到/var/www/html/home.php的新版本,并仍然找到旧的/var/www/html/images/image.png

相反:我找到了/var/www/html/home.php的新版本,但没有找到/var/www/html/images/image.png

由于Calum Halpin指出了这个答案 ,您可以轻松地在包含images/image.png存储库根目录中创建一个名为.gitignore的文件。 这样,git不会跟踪图像,也不会在服务器上将其删除。

您还可以编写一个脚本,该脚本自动提取并创建符号链接。

我发现了这一点:我必须将要保持不变的文件(即images / image.png)添加到gitignore文件中,然后我执行git fetch --all然后git reset --hard origin/master 这会将当前目录中的所有文件更新(并覆盖)到远程存储库中的新状态(是的,这将覆盖您所做的任何新更改,因此,如果您不想丢失工作,请记住使用git stash )。 同时, .gitignore文件中的所有文件都将保持不变:-)。 我写了一个小脚本: git fetch --all && git reset --hard origin/master

来源:这里的第一个答案: 如何强制“ git pull”覆盖本地文件?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM