Git:无法删除.php~文件

时间:2016-07-18 07:59:09

标签: php git symfony

我在Symfony 2项目上使用Git。我想切换分支,但我收到以下消息:

  

这些未跟踪的工作树文件将被结帐覆盖。   请在结账前移动或移除它们。

这里是文件列表:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test extends JFrame {
    private Timer timer;
    private int sec, min, hrs;
    private JPanel panel;
    private JButton start;
    private JLabel label1;

    public Test() {
        panel = new JPanel();
        label1 = new JLabel("" + hrs + " : " + min + " : " + sec);
        timer = new Timer(1000);
        start = new ToggleButton("Start", "Stop");
        panel.add(label1, BorderLayout.NORTH);
        panel.add(start, BorderLayout.SOUTH);
        getContentPane().add(panel, BorderLayout.CENTER);
        setVisible(true);
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.setSize(240, 360);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void tick() {
        sec++;
        if (sec >= 60) {
            min++;
            sec = sec - 60;
        }
        if (min >= 60) {
            hrs++;
            min = min - 60;
        }
        label1.setText("" + hrs + " : " + min + " : " + sec);
    }

    private class ToggleButton extends JButton {
        private boolean selected;
        private String otherText;

        public ToggleButton(String text, String otherText) {
            super(text);
            this.otherText = otherText;
            this.setSelected(true);
            this.fixListener();
        }

        public boolean isSelected() {
            return selected;
        }

        public void setSelected(boolean selected) {
            this.selected = selected;
        }

        private void fixListener() {
            addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent arg0) {
                    if (isSelected()) {
                        setSelected(false);
                        timer.start();
                    } else {
                        setSelected(true);
                        timer.pause();
                    }
                    String text = getText();
                    setText(otherText);
                    otherText = text;
                }
            });
        }
    }

    private class Timer extends Thread {
        private Thread thread;
        private boolean running;
        private boolean paused;
        private int ping;

        public Timer(int ping) {
            this.ping = ping;
            running = false;
            paused = true;
        }

        private void loop() {
            while (running) {
                if (!paused) {
                    tick();
                }
                delay(ping);
            }
        }

        private void delay(int mil) {
            try {
                Thread.sleep(mil);
            } catch (InterruptedException e) {
            }
        }

        public void start() {
            if (thread == null) {
                thread = new Thread(this);
                thread.start();
            } else {
                paused = false;
            }
        }

        public void pause() {
            paused = true;
        }

        @Override
        public void run() {
            running = true;
            paused = false;
            loop();
        }
    }
}

到目前为止我尝试了什么: 例如,我试图做

srv/myproject/src/mycompany/mybundle/Entity/Contacts.php~ srv/myproject/src/mycompany/mybundle/Entity/Products.php~ srv/myproject/src/mycompany/mybundle/Entity/Orders.php~

,它向我提供该文件不存在的消息。

我在“实体”-Folder中找不到任何“php~”文件。我只能看到常规的“php”文件。

为什么这些文件的文件名末尾有“〜”字符?

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

名称以~结尾的文件通常是某些编辑者制作的备份文件。无论它们是由你的编辑器制作的,我都不知道。

它们显示为未跟踪(Git说these untracked working tree files...),这意味着它们不在索引中,因此您无法将它们提供给git rm --cached指数。这反过来意味着 - 至少在这个点 - 没有做错任何事。 :-)这可能令人放心,但并没有真正帮助。

尽管如此,git checkout <otherbranch>抱怨建议结帐会覆盖它们。这意味着它们 包含在此git checkout将要检出的提交中。反过来,这意味着某人,在某些时候,通过首先提交它们来做错事。 (至少,假设它们只是编辑器备份文件,不应该像这样版本化。)这可能是你以外的其他人,意味着没有做错任何事,但是,嗯,仍然没有有帮助的。

这也意味着他们现在在你的工作树中 。他们如何到达那里很难说,尽管最明显的候选理由是你的编辑将它们作为编辑备份文件。

您需要做什么

您需要做的是移动或删除这些文件(假设他们是编辑器备份,完全删除它们可能是安全的),以便它们不再在您的工作树中。然后git checkout将能够将提交中的那些放入您的工作树中,而不会破坏您已经拥有的那些,因为您不再拥有它们。

您和/或其他人还需要做什么

提交这些文件是一个坏主意(假设一如既往,这些是编辑器备份)。在现有提交中很难解决这个问题。这取决于您和您的同事/同事是否要打扰。但是,无论如何,未来的提交都应该包含这些文件。

为此,您或某人不仅必须现在删除它们,还必须检查具有它们的提交,然后将其删除(例如git rm *~),然后修复这些提交或做出新的提交,告诉Git&#34;他们在那里,他们将在提交历史中,但从提交到这个新提交,现在删除它们。&#34;

此外,您或某人可能应该进行设置,以便Git默认忽略这些文件,以便它们不会将它们放入将来的提交中。通常的方法是在顶级*~文件中添加一行.gitignore。 (但是,一旦跟踪了文件,将其添加到.gitignore无效,直到它们被显式删除取消跟踪。这是因为.gitignore是错误的名称:它不是忽略的文件列表,未添加的文件列表,不抱怨忘记添加。)< / p>

答案 1 :(得分:0)

  1. 从git中删除不需要的文件:

    git reset HEAD path / to / unwanted_file

  2. 创建.gitignore文件并向其添加*~

  3. 做一个新的提交。